3. Uniurb4HS
alessandrobogliolo
Ordinamentodiuna
sequenza
0 1 2 3 4 5 6
altezza[3]
indice
altezza 175 165 110 180 150 100 170
Input
• Data una sequenza di elementi tra i quali esista una relazione d’ordine
• Dato il criterio di ordinamento da applicare
Output
• Restituire la sequenza ordinata secondo il criterio dato
6. Uniurb4HS
alessandrobogliolo
1. SELECTION SORT
Cerchiamo nella sequenza data l’elemento più piccolo e lo mettiamo
all’inizio della fila
Procediamo selezionando sempre il più piccolo tra quelli che restano e lo
aggiungiamo alla fila ordinata che stiamo componendo
15. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
175min
7N
da ordinareordinato
0i
0j
0pos
i indica il numero di elementi già ordinati e la posizione dove inserire
il prossimo elemento in ordine
j scorre tutti gli indici degli elementi ancora da ordinare
pos memorizza la posizione del più piccolo (min) degli elementi ancora da ordinare
16. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
165min
7N
da ordinareordinato
0i
1j
1pos
Sposto l’indice j, confronto altezza[j] con min, siccome
l’elemento in posizione j è minore di min, aggiorno min
e pos.
17. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
110min
7N
da ordinareordinato
0i
2j
2pos
Sposto l’indice j, confronto altezza[j] con min, siccome
l’elemento in posizione j è minore di min, aggiorno min
e pos.
18. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
110min
7N
da ordinareordinato
0i
3j
2pos
Sposto l’indice j, confronto altezza[j] con
min, ma siccome l’elemento in posizione
j NON è minore di min, NON aggiorno
min e pos.
19. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
110min
7N
da ordinareordinato
0i
4j
2pos
Sposto l’indice j, confronto altezza[j] con
min, ma siccome l’elemento in posizione
j NON è minore di min, NON aggiorno
min e pos.
20. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
100min
7N
da ordinareordinato
0i
5j
5pos
Sposto l’indice j, confronto altezza[j] con min, siccome
l’elemento in posizione j è minore di min, aggiorno min
e pos.
21. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
100min
7N
da ordinareordinato
0i
6j
5pos
Sposto l’indice j, confronto altezza[j] con min, ma
siccome l’elemento in posizione j NON è minore di min,
NON aggiorno min e pos.
22. Uniurb4HS
alessandrobogliolo
0 1 2 3 4 5 6indice
altezza 175 165 110 180 150 100 170
SELECTIONSORT
100min
7N
da ordinareordinato
0i
6j
5pos
Scambio gli elementi in posizione i e pos
Incremento i
Cerco nuovamente il minimo tra quelli da ordinare
29. Uniurb4HS
alessandrobogliolo
• Invariante di ciclo: ad ogni ciclo k
• ik è il numero di elementi già ordinati
• altezzak[m]<=altezzak[m+1] per ogni m<k
• altezzak[m]<=altezzak[posk]<=altezzak[n] per ogni m<k, n>=k
• altezzak[] contiene tutti gli elementi dati
• Quando k=N-1
• I primi N-1 elementi sono ordinati e tutti <= all’unico non ancora
ordinato, che quindi rispetta a sua volta il criterio di ordinamento
crescente
Selectionsort
Correttezza
42. Uniurb4HS
alessandrobogliolo
3. BUBBLE SORT
Partendo dall’ultimo elemento confronto coppie di elementi vicini e li scambio,
se necessario, in modo da portare a galla il più piccolo.
Quando arrivo in cima riparto dal fondo e procedo così finché ci sono scambi
da fare
82. Uniurb4HS
alessandrobogliolo
4. MERGE SORT
Risolvo il problema in modo ricorsivo, riducendolo a due problemi di dimensione
inferiore (l’ordinamento delle due metà dell’array dato) e unendo i risultati
(merge)