Lec-16-18-Heaps-HeapSort
Lec-16-18-Heaps-HeapSort
have degree 2.
Complete binary tree
Definitions
• Height of a node = the number of edges on
the longest simple path from the node down
to a leaf
• Level of a node = the length of a path from
the root to the node
• Height of tree = height of root node
4 Height of root = 3
1 3
Height of (2)= 1 2 16 9 10 Level of (10)= 2
14 8
Useful Properties
height
height
d +1
d
2 −1
n 2l = = 2d +1 − 1 Height of root = 3
l =0 2 −1 4
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
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
1. n = length[A] 4
1
5 6
3
7
2 16 9 10
2. for i ← n/2 downto 1
8 9 10
14 8 7
3. do MAX-HEAPIFY(A, i, n)
A: 4 1 3 2 16 9 10 14 8 7
Example: A 4 1 3 2 16 9 10 14 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
Complexity of BUILD MAX HEAP
Alg: BUILD-MAX-HEAP(A)
1. n = length[A]
O(n)
2. for i ← n/2 downto 1
3. do MAX-HEAPIFY(A, i, n) O(lgn)
floor(lg n ) floor(lg n )
n h
h =0
ceiling( h +1 )O(h) = O(n h )
2 h =0 2
Complexity of Build-Max-Heap
floor(lg n ) floor(lg n )
n h
h =0
ceiling( h+1 )O(h) = O(n h )
2 h =0 2
1
k =0
x =
k
1− x
; for | x | 1, differentiating both sides
x
k =0
kx = k
(1 − x) 2
; if x = 1 / 2
k
kxk =
k =0 k =0 2
k
=2
floor(lg n ) floor(lg n )
n h
Thus, h =0
ceiling( h+1 )O(h) = O(n h )
2 h =0 2
= O(n)
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)
3. do exchange A[1] A[i]
4. MAX-HEAPIFY(A, 1, i - 1) n-1 times