Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
04-Algoritmi Di Ordinamento
04-Algoritmi Di Ordinamento
21/10/2009
// Ordinamento decrescente
10
8 7 9 5 6 7 8 9 5 6 7 8 9 5 6 7 8 5 9 6 7 8 5 6 9
7 8 5 6 9 7 5 8 6 9 7 5 6 8 9
7 5 6 8 9 5 7 6 8 9 5 6 7 8 9
5 6 7 8 9
11
12
21/10/2009
5 7 4 9 6
l'insieme ordinato key l'insieme ordinato viene mantenuto nelle posizioni da [0..i] ad ogni iterazione inserisce il primo elemento dellinsieme non ordinato (key) in posizione ordinata nel vettore ordinato.
. . . . . . . . . . .
4 5 7 9 6
l'insieme ordinato
13
14
l'insieme ordinato viene mantenuto nelle posizioni da [0..i] ad ogni iterazione inserisce l'elemento key in posizione ordinata nel vettore ordinato. Partendo dal fondo fa un confronto tra elementi. Se l'elemento cercato e' maggiore di quello da inserire lo si sposta in avanti, altrimenti si e' trovata la posizione corretta e key viene inserito
8 7 9 5 6 7 8 9 5 6 7 8 9 5 6 7 8 5 9 6 7 5 8 9 6 5 7 8 9 6
7 9 5
5 7 8 9 6 5 7 8 6 9 5 7 6 8 9 5 6 7 8 9
for (i=1; i<n; i++) {
key
key = v[i]; for (j=i; j>0; j--) if (basecmp(v[j-1],key) == 1) v[j] = v[j-1]; else break; v[j] = key; }
15
16
k contiene l'indice dell'elemento minore del vettore v[i..n-1]. Questo va inserito in posizione i
. . . . .
17
18
21/10/2009
8 7 9 5 6 5 7 9 8 6 5 6 9 8 7 5 6 7 8 9
19
20
9 8 7 9 5 6 2 2 6 2
21
22
La funzione
siftDown()
(ri)costruisce lheap.
23
24
21/10/2009
Dimensione = 5
0 1 2 3 4 0 1 2 3 4
siftDown(v, i, array_size-1);
Dimensione = 5
8 7 9 5 6
8 7 9 5 6
0 1 2 3 4
9 8 7 5 6 6 8 7 5 9
for (i = array_size-1; i >= 1; i--) { swap(v,0,i); siftDown(v, 0, i-1); }
8 9 7 5 6
0 1 2 3 4 0 1 2 3 4
8 7 6 5 9 5 7 6 8 9 7 6 5 8 9 5 6 7 8 9
8 9 7 5 6
8 9 7 5 6
0 1 2 3 4
9 8 7 5 6
25
26
27
28
8 7 9 5 6 4
8 7 9
5 6 4
8 7
completamento della fusione con il resto della sottosequenza non ancora esurita
9 5
5 6 6
29
30
21/10/2009
7 8 9 5 6 4
7 8 9 5 6 4
7 8 9
5 6 4
7 8 9
5 6 4
7 8 8 7
9 5
5 6 6
4 8
7 8 7
9 5
5 6 6
31
32
4 5 6 7 8 9 7 8 9 4 5 6
7 8 9
4 5 6
7 8 8 7
9 5
5 6 6
4
(pivot)
12 4 5 87 11 2 6 45
Divisione dellarray
2 4 5 6 11 12 87 45
33
34
35
36
21/10/2009
.
lb
.
ub
lb(pivot)
ub
12 4 5 87 11 2 6 45
down up
12 4 5 87 11 2 6 45
Swap di down e up
swap(v,down,up); }
12 4 5 6 11 2 87 45
down = up
12 4 5 6 11 2 87 45
Swap di pivot e up
swap(v,lb,up);
2 4 5 6 11 12 87 45
37
38
Nome Bubble Sort Insertion Sort Selection Sort Heap Sort Merge Sort Quick Sort
Caso Migliore O(n) O(n) O(n2) O(n log n) O(n log n) O(n log n)
Caso Medio O(n2) O(n2) O(n2) O(n log n) O(n log n) O(n log n)
Caso Peggiore O(n2) O(n2) O(n2) O(n log n) O(n log n) O(n2)
Stabile? S S S No S No
Fonte: http://it.wikipedia.org/wiki/Algoritmi_di_ordinamento 39