Heap- sort - Universitetet i oslo · Algorithm HeapSort(A): for i ←n/2 down to 1 do...
Transcript of Heap- sort - Universitetet i oslo · Algorithm HeapSort(A): for i ←n/2 down to 1 do...
Heap-sort
Haugsortering
16 25 14 13 11
5
15 12 7 20
9 6
1
2
5 7
3
8 9
64
10 11 12 13
5 9 6 15 12 7 20 16 25 14 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
12 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
Animasjon
12 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
70
12 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
70
121
12 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
70
121
12 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
OBS!
Vi bygger maks-heap:mor ≥ barn
120
71
7 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
12
OBS!
Vi bygger maks-heap:mor ≥ barn
120
71
7 20 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
12
202
200
71
7 12 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
200
71
7 12 15 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
153
200
151
15 12 7 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
73
200
151
15 12 7 16 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
7 163 4
200
161
16 12 7 15 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
7 153 4
200
161
16 12 7 15 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
7 153 4 65
200
161
16 12 7 15 6 25 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
7 153 4 65 256
200
161
16 25 7 15 6 12 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
252
7 153 4 65 126
250
161
16 20 7 15 6 12 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
7 153 4 65 126
250
161
16 20 7 15 6 12 9 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
7 153 4 65 126
97
250
161
16 20 9 15 6 12 7 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
9 153 4 65 126
77
250
161
16 20 9 15 6 12 7 14 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
9 153 4 65 126
77 148
250
161
16 20 14 15 6 12 7 9 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 65 126
77 98
250
161
16 20 14 15 6 12 7 9 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 65 126
77 98 59
250
161
16 20 14 15 6 12 7 9 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 65 126
77 98 59 1310
250
161
16 20 14 15 6 12 7 9 5 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 65 126
77 98 59 1310 1111
250
161
16 20 14 15 11 12 7 9 5 13 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 115 126
77 98 59 1310 611
250
161
16 20 14 15 11 12 7 9 5 13 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 115 126
77 98 59 1310 611
Maksheapen er ferdig. Vi begynner å bygge opplista fra indeks n – 1
250
161
16 20 14 15 11 12 7 9 5 13 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
25
202
14 153 4 115 126
77 98 59 1310 611
60
161
16 20 14 15 11 12 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6
202
14 153 4 115 126
77 98 59 1310 2511
60
161
16 20 14 15 11 12 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6
202
14 153 4 115 126
77 98 59 1310
200
161
16 6 14 15 11 12 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
62
14 153 4 115 126
77 98 59 1310
200
161
16 12 14 15 11 6 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
14 153 4 115 66
77 98 59 1310
200
161
16 12 14 15 11 6 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
14 153 4 115 66
77 98 59 1310
200
161
16 12 14 15 11 6 7 9 5 13 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
20
122
14 153 4 115 66
77 98 59 1310
130
161
16 12 14 15 11 6 7 9 5 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
13
122
14 153 4 115 66
77 98 59
160
131
13 12 14 15 11 6 7 9 5 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
16
122
14 153 4 115 66
77 98 59
160
151
15 12 14 13 11 6 7 9 5 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
16
122
14 133 4 115 66
77 98 59
160
151
15 12 14 13 11 6 7 9 5 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
16
122
14 133 4 115 66
77 98 59
50
151
15 12 14 13 11 6 7 9 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
122
14 133 4 115 66
77 98
150
51
5 12 14 13 11 6 7 9 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
15
122
14 133 4 115 66
77 98
150
141
14 12 5 13 11 6 7 9 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
15
122
5 133 4 115 66
77 98
150
141
14 12 9 13 11 6 7 5 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
15
122
9 133 4 115 66
77 58
50
141
14 12 9 13 11 6 7 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
122
9 133 4 115 66
77
15
140
51
5 12 9 13 11 6 7 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
14
122
9 133 4 115 66
77
15
140
131
13 12 9 5 11 6 7 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
14
122
9 53 4 115 66
77
15
70
131
13 12 9 5 11 6 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
122
9 53 4 115 66
15
130
71
7 12 9 5 11 6 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
13
122
9 53 4 115 66
15
130
91
9 12 7 5 11 6 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
13
122
7 53 4 115 66
15
60
91
9 12 7 5 11 13 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6
122
7 53 4 115
15
120
91
9 6 7 5 11 13 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
12
62
7 53 4 115
15
120
91
9 11 7 5 6 13 14 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
12
112
7 53 4 65
15
60
91
9 11 7 5 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6
112
7 53 4
110
91
9 6 7 5 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
11
62
7 53 4
50
91
9 6 7 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
62
73
90
51
5 6 7 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
9
62
73
90
71
7 6 5 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
9
62
53
50
71
7 6 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
62
70
51
5 6 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
7
62
60
51
5 7 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6
50
6 7 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
6 7 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
6 7 9 11 12 13 14 15 16 20 25
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
5
Algorithm HeapSort(A):
for i ← n/2 down to 1 do
downHeap(A,i,n)
for i ← n down to 2 do
swap A[i] and A[1]
downHeap(a,1,i-1)
return A
16 25 14 13 11
5
15 12 7 20
9 6
1
2
5 7
3
8 9
64
10 11 12 13
5 9 6 15 12 7 20 16 25 14 13 11
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16