D O T T. I N G . L E O N A R D O R I G U T I N I
D I PA R T I M E N T O I N G E G N E R I A D E L L’ I N F O R M A Z I O N E
UNIVERSITÀ DI SIENA
VIA ROMA 56 – 53100 – SIENA
U F F. 0 5 7 7 2 3 4 8 5 0 - 7 1 0 2
RIGUTINI@DII.UNISI.IT
H T T P : / / W W W. D I I . U N I S I . I T / ~ R I G U T I N I /
Algoritmo di ordinamento
In altre parole:
- alla prima iterazione dell’algoritmo verrà selezionato l’elemento più
piccolo dell’intero insieme e sarà scambiato con quello che occupa la
prima posizione;
- alla seconda iterazione è selezionato il secondo elemento più piccolo
dell’insieme, ossia l’elemento più piccolo dell’insieme
“ridotto”costituito dagli elementi {a2,a3,...,an}ed è scambiato con
l’elemento che occupa la seconda posizione;
- Si ripete fino ad aver collocato nella posizione corretta tutti gli n
elementi.
Selection Sort
Il numero di operazioni è:
(n-1) + (n-2) + … + 2 + 1 n(n-1)/2 O(n2)
Verificare che esso impiega più o meno lo stesso tempo sia su file già
ordinati che su file con tutte le chiavi uguali, o anche su file ordinati in
modo casuale.
Selection Sort
Non è molto diverso dal modo in cui un essere umano, spesso, ordina
un mazzo di carte.
Algoritmo in place, cioè ordina l'array senza doverne creare una copia,
risparmiando memoria.
Insertion Sort
Per ogni valore ancora da inserire, viene fatta una ricerca binaria nella
parte ordinata del vettore e vengono spostati in avanti tutti gli elementi
per liberare la posizione
Complessità:
- Caso peggiore O(n2)
- Caso migliore O(n) vettore già ordinato
Il numero di operazioni è:
(n-1) + (n-2) + … + 2 + 1 n(n-1)/2 O(n2)
Quick Sort
Quick Sort
l--;
swap(array[begin], array[l]);
sort(array, begin, l);
sort(array, r, end);
}
}
Swap
Caso migliore/medio:
- O(n log2 n)
Merge Sort
Merge Sort
L'idea alla base del merge sort è il procedimento Divide et Impera, che
consiste nella suddivisione del problema in sottoproblemi via via più
piccoli.
Fase 1: divide
- L'insieme di elementi viene diviso in 2 metà. Se l'insieme è
composto da un numero dispari di elementi, viene diviso in 2
sottogruppi dei quali il primo ha un elemento in meno del secondo.
Fase 2: impera
- Supponendo di avere due sequenze già ordinate. Per unirle,
l'algoritmo mergesort estrae ripetutamente il minimo delle due
sequenze in ingresso e lo pone in una sequenza in uscita.
Merge
Complessità:
- Caso peggiore O(n log n)