Professional Documents
Culture Documents
12 16
1 4 7
19 12 16 1 4 7
Array A
Min heap example
1
4 16
7 12 19
1 4 16 7 12 19
Array A
Insertion
• Algorithm
1. Add the new element to the next available position at the
lowest level
2. Restore the max-heap property if violated
• General strategy is percolate up (or bubble up): if the
parent of the element is smaller than the element, then
interchange the parent and child.
OR
Restore the min-heap property if violated
• General strategy is percolate up (or bubble up): if the
parent of the element is larger than the element, then
interchange the parent and child.
19 19
12 16 12 16
4 7 1 4 7 17
1
Insert 17
19
12 17
swap
1 4 7 16
• Delete min
– Copy the last number to the root ( overwrite the
minimum element stored there ).
– Restore the min heap property by percolate down.
Heap Sort
• A sorting algorithm that works by first
organizing the data to be sorted into a special
type of binary tree called a heap
Procedures on Heap
• Heapify
• Build Heap
• Heap Sort
Heapify
• Heapify picks the largest child key and compare it to the
parent key.
• If parent key is larger than heapify quits, otherwise it swaps
the parent key with the largest child key.
• So that the parent is now becomes larger than its children.
Contd.,
Heapify(A, i)
{
lt left(i)
rt right(i)
if lt <= heapsize[A] and A[lt] > A[i]
then largest lt
else largest i
if rt <= heapsize[A] and A[rt] > A[largest]
then largest rt
if largest != i
then swap A[i] A[largest]
Heapify(A, largest)
}
Build Heap
• We can use the procedure 'Heapify' in a bottom-up
fashion to convert an array A[1 . . n] into a heap.
• Since the elements in the subarray A[n/2 +1 . . n] are
all leaves, the procedure BUILD_HEAP goes through
the remaining nodes of the tree and runs 'Heapify' on
each one.
• The bottom-up order of processing node guarantees
that the sub-tree rooted at children are heap before
'Heapify' is run at their parent.
Contd.,
Buildheap(A)
{
heapsize[A] length[A]
for i |length[A]/2 //down to 1
do Heapify(A, i)
}
Heap Sort Algorithm
• The heap sort algorithm starts by using procedure
BUILD-HEAP to build a heap on the input array
A[1 . . n].
• Since the maximum element of the array stored at the
root A[1], it can be put into its correct final position
by exchanging it with A[n] (the last element in A).
• If we now discard node n from the heap than the
remaining elements can be made into heap.
• Note that the new element at the root may violate the heap property. All
that is needed to restore the heap property.
Contd.,
Heapsort(A)
{
Buildheap(A)
for i length[A] //down to 2
do swap A[1] A[i]
heapsize[A] heapsize[A] - 1
Heapify(A, 1)
}
Example: Convert the following array to a heap
16 4 7 1 12 19
16
4 7
1 12 19
16 16
4 7 4 19
swap
12 19 1 12 7
1
16 19
swap
12 19 12 16
swap
4 7 1 4 7
1
Heap Sort
• The heapsort algorithm consists of two phases:
- build a heap from an arbitrary array
- use the heap to sort the data
• To sort the elements in the decreasing order, use a min heap
• To sort the elements in the increasing order, use a max heap
19
12 16
1 4 7
Algorithm
Step 1. Build Heap – O(n)
- Build binary tree taking N items as input, ensuring the heap
structure property is held, in other words, build a complete
binary tree.
- Heapify the binary tree making sure the binary tree satisfies
the Heap Order property.
Step 2. Perform n deleteMax operations – O(log(n))
- Delete the maximum element in the heap – which is the root
node, and place this element at the end of the sorted array.
Example of Heap Sort
Take out biggest
19
12 16
Move the last element
to the root
1 4 7
Sorted:
Array A
12 16 1 4 7 19
Contd.,
7
swap
HEAPIFY()
12 16
1 4
Sorted:
Array A
7 12 16 1 4 19
Contd.,
16
12 7
1 4
Sorted:
Array A
16 12 7 1 4 19
Contd.,
Take out biggest
16
Move the last element
to the root
12 7
1 4
Sorted:
Array A
12 7 1 4 16 19
Contd.,
4
12 7
Sorted:
Array A
4 12 7 1 16 19
Contd.,
swap 4
HEAPIFY()
12 7
Sorted:
Array A
4 12 7 1 16 19
Contd.,
12
4 7
Sorted:
Array A
12 4 7 1 16 19
Contd.,
Take out biggest
12
Move the last
element to the
root 4 7
Sorted:
Array A
4 7 1 12 16 19
Contd.,
1
swap
4 7
Sorted:
Array A
1 4 7 12 16 19
Contd.,
7
4 1
Sorted:
Array A
7 4 1 12 16 19
Contd.,
Take out biggest
7
Move the last
element to the
4 1 root
Sorted:
Array A
1 4 7 12 16 19
Contd.,
swap 1
HEAPIFY()
4
Sorted:
Array A
4 1 7 12 16 19
Contd.,
Take out biggest
Move the last 4
element to the
root
1
Sorted:
Array A
1 4 7 12 16 19
Contd.,
Take out biggest
1
Sorted:
Array A
1 4 7 12 16 19
Time Analysis
• Build Heap Algorithm will run in O(n) time
• There are n-1 calls to Heapify each call
requires O(log n) time
• Heap sort program combine Build Heap
program and Heapify, therefore it has the
running time of O(n log n) time
• Total time complexity: O(n log n)
Sample Run
• Heapify the binary tree -
21
15 25
3 5 12 7
19 45 2 9
21 21
15 25 15 25
3 5 12 7 3 9 12 7
19 45 2 9 19 45 2 5
21 21
15 25 15 25
45 9 12 7 45 9 12 7
19 3 2 5 19 3 2 5
21 21
15 25 45 25
45 9 12 7 19 9 12 7
19 3 2 5 15 3 2 5
45
21 25
19 9 12 7
15 3 2 5
Step 2 – perform n – 1 deleteMax(es), and replace last element in heap with first,
then re-heapify. Place deleted element in the last nodes position.
45 25
21 25
21 12
19 9 12 7 19 9 5 7
15 3 2 5 15 3 2
25
21
21 12
19 12
19 9 5 7
15 9 5 7
15 3 2 2 3
21 19
19 12 15 12
15 9 5 7
3 9 5 7
2 3
2
19 15
15 12 9 12
3 9 5 7
2 5 7
3
2
15 12
9 12 9 7
2 5 7 3 2 5
3
9
12
5 7
9 7
3 2
3 2 5
…and finally