Lecture 21 HeapSort
Lecture 21 HeapSort
1 / 70
Priority Queues
2 / 70
Priority Queues
Priority queues are data structures that provide more flexibility than
simple sorting,
they allow new elements to enter a system at arbitrary intervals.
it is much more cost-effective to insert a new job into a priority
queue than to re-sort everything on each such arrival.
3 / 70
Priority Queues
Operations.
INSERT(x). given an item x with key k, insert it into the priority
queue.
FIND-MINIMUM() or FIND-MAXIMUM(). return item with smallest
or largest key value.
DELETE-MINIMUM() or DELETE-MAXIMUM(). remove item with
smallest or largest key value.
We can simply call the operations as PUSH, TOP and POP.
4 / 70
Priority Queues
5 / 70
Priority Queues
6 / 70
Priority Queues
record Multiqueue
{
queues[M] // M queues for M priorities
count // total number of items
}
Operations:
EMPTY()
TOP()
PUSH(n)
POP()
7 / 70
Priority Queues
8 / 70
Priority Queues
POP()
if EMPTY():
underflow exception
for i = 0 to M-1:
if queues[i].IS-NOT-EMPTY():
queues[i].DEQUEUE()
count -= 1
return
9 / 70
Priority Queues
10 / 70
Priority Queues
We could simply insert the objects into an AVL tree where the order is
given by the stated priority:
PUSH is Θ(ln(n))
TOP is Θ(ln(n))
POP is Θ(ln(n))
There is significant overhead for maintaining both the tree and the
corresponding balance.
11 / 70
Priority Queues
12 / 70
Binary Heaps
7 12
9 31 41
33 19 32 58 42 53
36 88 55 39 89
13 / 70
Binary Heaps
Operations.
Top
Pop
Push
14 / 70
Binary Heaps
7 12
9 31 41
33 19 32 58 42 53
36 88 55 39 89
15 / 70
Binary Heaps
7 12
9 31 15
33 19 32 58 41
36 88 55 39 89 42 53
16 / 70
Binary Heaps
12
9 31 15
33 19 32 58 41
36 88 55 39 89 42 53
17 / 70
Binary Heaps
9 12
31 15
33 19 32 58 41
36 88 55 39 89 42 53
18 / 70
Binary Heaps
9 12
19 31 15
33 32 58 41
36 88 55 39 89 42 53
19 / 70
Binary Heaps
9 12
19 31 15
33 55 32 58 41
36 88 55 39 89 42 53
20 / 70
Binary Heaps
9 12
19 31 15
33 55 32 58 41
36 88 39 89 42 53
21 / 70
Binary Heaps
19 12
33 31 15
36 55 32 58 41
88 39 89 42 53
22 / 70
Binary Heaps
12
19 15
33 31 41
36 55 32 58 42
88 39 89 53
23 / 70
Binary Heaps
24 / 70
Binary Heaps
12
19 15
33 31 41
36 55 32 58 42
88 39 89 53
25 / 70
Binary Heaps
12
19 15
33 31 41
36 55 32 58 42
88 17 39 89 53
26 / 70
Binary Heaps
12
19 15
33 31 41
36 55 17 58 42
88 32 39 89 53
27 / 70
Binary Heaps
12
19 15
33 17 41
36 55 31 58 42
88 32 39 89 53
28 / 70
Binary Heaps
12
17 15
33 19 41
36 55 31 58 42
88 32 39 89 53
29 / 70
Binary Heaps
12
17 15
33 19 41
36 55 31 58 42
88 32 39 89 53
12
17 15
33 19 41 32
36 55 31 58 42 89 39 53
88
31 / 70
Binary Heaps
12
17 15
33 19 41 32
36 55 31 58 42 89 39 53
88 25
32 / 70
Binary Heaps
12
17 15
33 19 41 32
25 55 31 58 42 89 39 53
88 36
33 / 70
Binary Heaps
12
17 15
25 19 41 32
33 55 31 58 42 89 39 53
88 36
34 / 70
Binary Heaps
12
17 15
25 19 41 32
33 55 31 58 42 89 39 53
88 36
35 / 70
Binary Heaps
15
17 32
25 19 41 39
33 55 31 58 42 89 φ 53
88 36
36 / 70
Binary Heaps
12
17 15
25 19 41 32
33 55 31 58 42 89 39 53
88 36
37 / 70
Binary Heaps
36
17 15
25 19 41 32
33 55 31 58 42 89 39 53
88 36
38 / 70
Binary Heaps
15
17 36
25 19 41 32
33 55 31 58 42 89 39 53
88 36
39 / 70
Binary Heaps
15
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88 36
40 / 70
Binary Heaps
15
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88
41 / 70
Binary Heaps
88
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88
42 / 70
Binary Heaps
17
88 32
25 19 41 36
33 55 31 58 42 89 39 53
88
43 / 70
Binary Heaps
17
19 32
25 88 41 36
33 55 31 58 42 89 39 53
88
44 / 70
Binary Heaps
17
19 32
25 31 41 36
33 55 88 58 42 89 39 53
88
45 / 70
Binary Heaps
17
19 32
25 31 41 36
33 55 88 58 42 89 39 53
46 / 70
Binary Heaps
53
19 32
25 31 41 36
33 55 88 58 42 89 39 53
47 / 70
Binary Heaps
19
53 32
25 31 41 36
33 55 88 58 42 89 39 53
48 / 70
Binary Heaps
19
25 32
53 31 41 36
33 55 88 58 42 89 39 53
49 / 70
Binary Heaps
19
25 32
33 31 41 36
53 55 88 58 42 89 39 53
50 / 70
Binary Heaps
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 15 | 17 | 32 | 25 | 19 | 41 | 36 | 33 | 55 | 31 | 58 | 42 | 89 | 39 | 53 | 88 |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
51 / 70
Binary Heaps
52 / 70
Binary Heaps
15
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 15 | 17 | 32 | 25 | 19 | 41 | 36 | 33 | 55 | 31 | 58 | 42 | 89 | 39 | 53 | 88 |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
53 / 70
Binary Heaps
15
17 32
25 19 41 36
33 55 31 58 42 89 39 53
88
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 15 | 17 | 32 | 25 | 19 | 41 | 36 | 33 | 55 | 31 | 58 | 42 | 89 | 39 | 53 | 88 |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
54 / 70
Binary Heaps
6 12
9 14 23 29
10 25 19 15
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 12 | 9 | 14 | 23 | 29 | 10 | 25 | 19 | 15 | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
55 / 70
Binary Heaps
6 12
9 14 23 29
10 25 19 15 26
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 12 | 9 | 14 | 23 | 29 | 10 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
56 / 70
Binary Heaps
Push key 8.
it requires percolations.
6 12
9 14 23 29
10 25 19 15 26 8
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 12 | 9 | 14 | 23 | 29 | 10 | 25 | 19 | 15 | 26 | 8 | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
57 / 70
Binary Heaps
6 12
9 14 8 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 12 | 9 | 14 | 8 | 29 | 10 | 25 | 19 | 15 | 26 | 23 | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
58 / 70
Binary Heaps
6 8
9 14 12 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 8 | 9 | 14 | 12 | 29 | 10 | 25 | 19 | 15 | 26 | 23 | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
59 / 70
Binary Heaps
6 8
9 14 12 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 3 | 6 | 8 | 9 | 14 | 12 | 29 | 10 | 25 | 19 | 15 | 26 | 23 | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
60 / 70
Binary Heaps
23
6 8
9 14 12 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 23 | 6 | 8 | 9 | 14 | 12 | 29 | 10 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
61 / 70
Binary Heaps
Swap 23 and 6.
23 8
9 14 12 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 6 | 23 | 8 | 9 | 14 | 12 | 29 | 10 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
62 / 70
Binary Heaps
Swap 23 and 9.
9 8
23 14 12 29
10 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 6 | 9 | 8 | 23 | 14 | 12 | 29 | 10 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
63 / 70
Binary Heaps
9 8
10 14 12 29
23 25 19 15 26 23
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 6 | 9 | 8 | 10 | 14 | 12 | 29 | 23 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
64 / 70
Binary Heaps
9 8
10 14 12 29
23 25 19 15 26
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 6 | 9 | 8 | 10 | 14 | 12 | 29 | 23 | 25 | 19 | 15 | 26 | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
65 / 70
Binary Heaps
26
9 8
10 14 12 29
23 25 19 15 26
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 26 | 9 | 8 | 10 | 14 | 12 | 29 | 23 | 25 | 19 | 15 | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
66 / 70
Binary Heaps
Swap 26 and 8.
9 26
10 14 12 29
23 25 19 15 26
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 8 | 9 | 26 | 10 | 14 | 12 | 29 | 23 | 25 | 19 | 15 | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
67 / 70
Binary Heaps
9 12
10 14 26 29
23 25 19 15 26
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | | | | |
| | 8 | 9 | 12 | 10 | 14 | 26 | 29 | 23 | 25 | 19 | 15 | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
68 / 70
Binary Heaps
Running times.
TOP is Θ(1).
POP is O (ln(n)).
PUSH is,
O (ln(n)) if key inserted is less than the root
Θ(1) if greater than its parent.
69 / 70
Binary Heaps
Heapsort
70 / 70