Lecture 10 11 Heap Tree Sort
Lecture 10 11 Heap Tree Sort
4
Def: Complete binary
tree = a binary tree in 1 3
1 3
Height of (2)= 1 2 16 9 10 Level of (10)= 2
14 8
Useful Properties
height
height
(see Ex 6.1-2, page 129)
d 1
d
2 1
n 2l 2d 1 1 4 Height of root = 3
l 0 2 1
1 3
Height of (2)= 1 2 16 9 10 Level of (10)= 2
14 8
The Heap Data Structure
Def: A heap is a nearly complete binary
tree with the following two properties:
Structural property: all levels are full, except
possibly the last one, which is filled from left
to right
Order (heap) property: for any node x
Parent(x) ≥ x
8
From the heap property, it
7 4
follows that:
“The root is the maximum
5 2
element of the heap!”
Heap
Priority queues
Maintaining the Heap Property
Suppose a node is smaller than
a child
Left and Right subtrees of i are
max-heaps
To eliminate the violation:
Exchange with larger child
Move down the tree
Continue until node is not smaller
than children
Example
MAX-HEAPIFY(A, 2, 10)
A[2] A[4]
A[2] violates the heap property A[4] violates the heap property
A[4] A[9]
4
Alg: BUILD-MAX-HEAP(A)
2 3
n n = length[A] 1 3
4 5 6 7
n for i ← n/2 downto 1 2 16 9 10
8 9 10
n do MAX-HEAPIFY(A, i, n) 14 8 7
A: 1
4 1 3 2 16 9 14 8 7
0
Example: A 4 1 3 2
1
6
9 10
1
4
8 7
4 4 4
2 3 2 3 2 3
1 3 1 3 1 3
4 5 6 7 4 5 6 7 4 5 6 7
8
2 9 10
16 9 10 8 2 9 10
16 9 10 8 14 9 10
16 9 10
14 8 7 14 8 7 2 8 7
i=2 i=1
1 1 1
4 4 16
2 3 2 3 2 3
1 10 16 10 14 10
4 5 6 7 4 5 6 7 4 5 6 7
8
14 9 10
16 9 3 8
14 9 10
7 9 3 8
8 9 10
7 9 3
2 8 7 2 8 1 2 4 1
Running Time of BUILD MAX
HEAP
Alg: BUILD-MAX-HEAP(A)
• n = length[A]
O(n)
• for i ← n/2 downto 1
• do MAX-HEAPIFY(A, i, O(lgn)
n)
Running time: O(nlgn)
This is not an asymptotically tight upper
bound
Heapsort
Goal:
Sort an array using heap representations
Idea:
Build a max-heap from the array
Swap the root (the maximum element) with the last
element in the array
“Discard” this last node by decreasing the heap size
Call MAX-HEAPIFY on the new root
Repeat this process until only one node remains
Example: A=[7, 4, 3, 1, 2]
MAX-HEAPIFY(A, 1, 1)
Alg: HEAPSORT(A)
1. BUILD-MAX-HEAP(A)
2. for i ← length[A] downto 2 O(n)