240 likes | 572 Views
Design and Analysis of Algorithms Heap sort. Haidong Xue Summer 2012, at GSU. Max-Heap. A complete binary tree, and …. every level is completely filled , except possibly the last , which is filled from left to right . Yes. No. Yes. Max-Heap.
E N D
Design and Analysis of AlgorithmsHeapsort HaidongXue Summer 2012, at GSU
Max-Heap • A complete binary tree, and … every level is completely filled,except possibly the last, which is filled from left to right Yes No Yes
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 5 7 8 4 6
Max-Heap 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) • Use an array as a heap 1 16 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 7 9 3 2 14 16 10 8 1 2 3 5 7 8 4 6
Max-Heapify • Input: A compete binary tree rooted at i, whose left and right sub trees are max-heaps; last node index • Output: A max-heap rooted at i. • Algorithm: 1. Choose the largest node among node i, left(i), right(i) . 2. if(the largest node is not i){ • Exchange i with the largest node • Max-Heapify the affected subtree }
Max-Heapify Example 2 16 10 14 7 9 3 8
Heapsort for a heap • Input: a heap A • Output: a sorted array A Algorithm: 1. Last node index l = A’s last node index 2. From the last element to the second{ exchange (current, root); l--; Max-Heapify(A, root, l); }
Heapsort example 16 14 10 3 9 8 7 2
Heapsort example 14 8 10 3 9 2 7 16
Heapsort example 10 8 9 14 3 2 7 16
Heapsort example 9 8 3 14 10 2 7 16
Heapsort example 8 7 3 14 10 2 9 16
Heapsort example 7 2 3 14 10 8 9 16
Heapsort example 3 2 7 14 10 8 9 16
Array -> Max-Heap • Input: a array A • Output: a Max-Heap A Algorithm: Considering A as a complete binary tree, from the last non-leaf node to the first one{ Max-Heapify(A, current index, last index); }
Build Heap Example 7 10 8 16 14 14 8 16 10 7
Heapsort • Input: array A • Output: sorted array A Algorithm: 1. Build-Max-Heap(A) 2. Last node index l = A’s last node index 3. From the last element to the second{ exchange (current, root); l--; Max-Heapify(A, root, l); } Let’s try it
Analysis of Heapsort • Input: array A • Output: sorted array A Algorithm: 1. Build-Max-Heap(A) 2. Last node index l = A’s last node index 3. From the last element to the second{ exchange (current, root); l--; Max-Heapify(A, root, l); } O(n) or O(nlgn) O(n) O(nlgn)