Ordinamento di array: per selezione
Definizione del problema : Ordinare in senso crescente gli elementi di un array
monodimensionale e visualizzare lo array risultante.
Definizione della specifica del programma:
I: l’array monodimensionale; il valore di ciascun elemento dello array
Pi: nessuna
U: l’array monodimensionale con gli elementi ordinati in senso crescente
Pu: nessuna
Descrizione del metodo di elaborazione :Si userà l’algoritmo di ordinamento per
selezione (detto anche per minimi successivi). Detto T lo array mono-dimensionale di
cardinalità n, per ottenere l’ordinamento desiderato deve verificarsi che sia T[i] ? T[i+1] ?
i=1..n. Si trova, allora, il valore minimo T[p] dell’intero array e si scambia il valore di T[p]
con quello di T[1]; poi, si trova il nuovo minimo T[p] tra tutti gli elementi T[2] e T[n] e si
scambia il valore diT[p] con quello di T[2]; si continua in tal modo con tutti gli altri
elementi dell’array. Alla fine visualizzare sono visualizzati gli elementi dell’array
risultante.
1
Ordinamento di array: per selezione
9
5
8
2
4
2
5
8
9
4
9
5
8
2
4
2
4
5
9
8
2
4
5
9
8
2
5
8
9
4
2
4
8
9
5
2
4
8
9
5
2
4
5
8
9
2
1
Ordinamento di array: per selezione
Tabella delle variabili di ingresso
Nome variabile
VET
Descrizione
Array da ordinare in senso crescente
Tipo
INT
Tabella delle variabili di uscita
Nome variabile
VET
Descrizione
Array da ordinato
Tipo
INT
3
Program Ordina_array;
const cardinalita:=50;
INT VET[cardinalita], I, R,MIN, POS;
begin
// Lettura valori elementi dell’array
Leggi_array(VET, cardinalita, R);
minimi_successivi(VET, R);
Stampa_array(VET, R);
end.
Procedure minimi_successivi (inout INT
T[ ], in RP)
INT K, A, PS;
begin
for K:=1 to (RP-1) do
begin
trova_minimo(T, K, RP, PS);
A:=T[K]; T[K]=T[PS];T[PS]=A;
end;
endfor;
end;
Ordinamento di array:
per selezione
Procedure trova_minimo (inout INT V[]; in INT
Inz, Fn; out INT POS);
// Cerca il valore minimo nello array
INT I;
MIN := VET[Inz]; POS:=Inz;
for I:=(Inz+1) to Fn do
begin
if VET[I]<MIN then
begin
MIN:=VET[I];
POS:=I;
end
endif
end;
endfor;
end;
4
2
Ricerca di un elemento in un array ordinato
Definizione del problema : Si vuole verificare se in un array ordinato esiste un
elemento con un dato valore e se esso esiste si vuole conoscere la sua posizione.
Definizione della specifica del programma:
I: lo array monodimensionale ordinato; il valore dell’elemento che si vuole cercare
Pi: nessuna
U: la posizione dell’elemento con valore pari a quello cercato se esso esiste nello array
Pu: nessuna
Descrizione del metodo di elaborazione : Viene letto il valore da cercare; viene
considerato l’elemento dello array (ordinato supponiamo in senso crescente) in posizione
centrale (rispetto al riempimento); se il dato da cercare è ugale a quello centrale la ricerca è
terminata altrimenti:
• se il dato da cercare è minore di quello centrale viene applicato lo stesso algoritmo alla
prima parte dello array se questa ha almeno un elemento, altrimenti
• se il dato da cercare è maggiore di quello centrale viene applicato lo stesso algoritmo
alla seconda parte dello array, se questa ha almeno un elemento
Si continua fin quando un elemento centrale è pari a quello cercato o nessuna parte contirne
più elementi
5
Riemp = 9
Card = 12
3 10 28 31 33 40 57 93 98
=?
Inf = 1
Sup = 9
93
Posizione elemento centrale:
P=(Sup+Inf)/2=5
33 10
10 28
28 31
31 33
33 40 57 93 98
=?
Inf = 6
Sup = 9
93
Posizione elemento centrale:
P=(Sup+Inf)/2=7
33 10
10 28
28 31
31 33
33 40
40 57
57 93 98
Inf = 8
=?
Sup = 9
Posizione elemento centrale:
P=(Sup+Inf)/2=8
93
6
3