Chapter 7: Sorting Algorithms Heap Sort Mark Allen Weiss: Data Structures and Algorithm Analysis in Java Lydia Sinapova, Simpson College
2 Heap Sort Basic Idea Complexity Example Animation Animation
3 Idea Store N elements in a binary heap tree. Perform delete_Min operation N times, storing each element deleted from the heap into another array. Copy back the array. Not very efficient to use two arrays. Improvement – use one array for the binary heap and the sorted elements
4 Improvements Use the same array to store the deleted elements instead of using another array After each deletion we get a vacant position in the array - the last cell. There we store the deleted element, which becomes part of the sorted sequence.
5 Improvements When all the elements are deleted and stored in the same array following the above method, the elements will be there in reversed order. What is the remedy for this? Store the elements in the binary heap tree in reverse order of priority - then at the end the elements in the array will be in correct order.
6 Complexity Sorts in O(NlogN) time by performing N times deleteMax operations. - Each deleteMax operation takes log N running time. - N times performing deleteMax NlogN running time Used for general purpose sorting, guarantees O(N logN)
7 Example Consider the values of the elements as priorities and build the heap tree. 2. Start deleteMax operations, storing each deleted element at the end of the heap array.
8 Example (cont) Note that we use only one array, treating its parts differently: when sorting, part of the array will be the heap, and the rest part - the sorted array
9 Build the Heap We start with the element at position SIZE/2 comparing the item with the children. The hole is percolated down to position 6 and the item is inserted there Result: holechild
10 Build the Heap Next we compare position 2 with its children holechild1child2 19 is greater than 7 and 17, and we continue with position
11 Build the Heap Percolate down the hole at position The hole at position 1 is percolated down to position 2 -the greater child
12 Build the Heap Percolate down the hole at position One of the children of the hole at position 2 - item 17, is greater than 15. So we percolate the hole to position
13 Build the Heap the heap is built
14 Sorting DeleteMax the top element Store the last heap element (10) in a temporary place. Move the DeletedMax element (19) to the place where the last heap element was - the current available position in the sorted portion of the array. A hole is created at the top 10
15 Sorting Percolate down the hole
16 Sorting Percolate down the hole
Sorting Fill the hole
18 Sorting DeleteMax the top element Store the last heap element (10) in a temporary place. Move the DeletedMax element (17) to the place where the last heap element was - the current available position in the sorted portion of the array. A hole is created at the top
19 Sorting Percolate down the hole
20 Sorting Fill the hole
21 Sorting DeleteMax the top element Store the last heap element (7) in a temporary place. Move the DeletedMax element (16) to the place where the last heap element was - the current available position in the sorted portion of the array. A hole is created at the top 7
22 Sorting Percolate down the hole
23 Sorting Fill the hole
24 Sorting DeleteMax the top element Store the last heap element (10) in a temporary place. Move the DeletedMax element (15) to the place where the last heap element was - the current available position in the sorted portion of the array. A hole is created at the top
25 Sorting Percolate down the hole Since 10 is greater than the children of the hole, It has to be inserted in the hole
26 Sorting Fill the hole
27 Sorting DeleteMax the top element Store the last heap element (7) in a temporary place. Move the DeletedMax element (10) to the place where the last heap element was - the current available position in the sorted portion of the array. A hole is created at the top 10
28 Sorting Fill the hole The hole has no children and so it has to be filled.
29 Sorted array is the last element from the heap, so now the array is sorted