Design and Analysis of Algorithms Heapsort Haidong Xue Fall 2013, at GSU
Max-Heap A complete binary tree, and … Yes Yes No every level is completely filled, except possibly the last, which is filled from left to right Yes Yes No
Max-Heap Satisfy max-heap property: parent >= children 16 14 10 8 7 9 3 2 Since it is a complete tree, it can be put into an array without lose its structure information.
Max-Heap 16 14 10 8 7 9 3 2 1 2 3 4 5 6 7 8
Max-Heap Use an array as a heap For element at i: 1 16 For element at i: Parent index =parent(i)= floor(i/2); Left child index = left(i)=2*i; Right child index =right(i)=2*i +1 Last non-leaf node = floor(length/2) 2 3 14 10 4 5 6 7 8 7 9 3 8 i=3 2 floor(i/2)=floor(1.5)=1 2*i = 6 2*i+1=7 floor(length/2)=4 16 14 10 8 7 9 3 2 1 2 3 4 5 6 7 8
Max-Heapify Input: A compete binary tree A, rooted at i, ended at t, whose left and right sub trees are max-heaps; last node index Output: A max-heap rooted at i. Algorithm: MAX-HEAPIFY (A, i, t) 1. if(right(i)>t and left(i)>t) return; 2. Choose the largest node among node i, left(i), right(i) . 3. if(the largest node is not i){ m = the index of the larger node Exchange i with the largest node MAX-HEAPIFY (A, m, t) }
Max-Heapify Example 2 16 10 14 7 9 3 8
Heapsort for a heap Input: a max-heap in array A Output: a sorted array A HEAP-SORT Algorithm: 1. BUILD-MAX-HEAP(A) 2. Last node index i = A’s last node index 3. From the last element to the second in A{ exchange (i, root); i--; MAX-HEAPIFY(A, root, i); }
Heapsort example 16 14 10 8 7 9 3 2
Heapsort example 14 8 10 2 7 9 3 16
Heapsort example 10 8 9 2 7 3 14 16
Heapsort example 9 8 3 2 7 10 14 16
Heapsort example 8 7 3 2 9 10 14 16
Heapsort example 7 2 3 8 9 10 14 16
Heapsort example 3 2 7 8 9 10 14 16
Array -> Max-Heap Input: a array A Output: a Max-Heap A BUILD-MAX-HEAP(A): Considering A as a complete binary tree, from the last non-leaf node to the first one i{ MAX-HEAPIFY(A, i, A.lastIndex); }
Build Heap Example 14 8 16 10 7 14 8 16 10 7
Heapsort Input: array A Output: sorted array A Algorithm: 1. BUILD-MAX-HEAP(A) 2. Last node index i = A’s last node index 3. From the last element to the second in A{ exchange (i, root); i--; MAX-HEAPIFY(A, root, i); }
Analysis of Heapsort Input: array A Output: sorted array A Algorithm: 1. BUILD-MAX-HEAP(A) 2. Last node index i = A’s last node index 3. From the last element to the second in A{ exchange (i, root); i--; MAX-HEAPIFY(A, root, i); } O(nlgn) (or O(n) see page 157-159 for why) O(n) O(nlgn)