[Texas PLT logo]

COMP 202: Principles of Object-Oriented Programming II

  Heaps and Heap Sort  

Heap Sort

How is split() sped up?

What is a Heap?

Implementing a Heap?

Heap Sort Basics

Heap Sort: split()

Example of siftDown()

siftDown(): The Implementation

Initializing the Heap: HeapSorter()

In order to sort an array, using the ordering capabilities of a heap, you must first transform the randomly placed data in the array into a heap.  This is called "heapifying" the array.  This can be accomplished by sifting down the elements.  Luckily, even though this operation takes place in O(n log(n)) time, it only occurs once, so in the end, it has no impact on the overall complexity of the algorithm.

Note that we only really have to sift down half the array, i.e. half the "tree".  This is because a single-element array (tree) is already a heap, so we can bypass all the leaves and immediately start working on the layer right above the leaves.

Inserting into an existing Heap: siftUp()

To insert a data element into an existing heap, we are forced to initially insert the element at the bottom of the tree, which is at the end of the array.  Since this may break the heap property, we need "sift up" the data through the tree to find a spot for it where the overall heap property will be restored.  When sifting up, we are essentially taking a data element, (starting with the one being inserted) comparing it to its parent and then taking the largest (or smallest) of the pair, leaving the other in the parent's position.   The process with the left-over data element and the next higher parent until the top of the heap is reached.

Sample Code

Summary of Sorting (see also SortSummary.pdf)

Best-case Cost Worst-case Cost
Selection O(n2) O(n2)
Insertion O(n) O(n2)
Heap O(n log n) O(n log n)
Merge O(n log n) O(n log n)
Quick O(n log n) O(n2)


  Heaps and Heap Sort  

URL: http://www.cs.rice.edu/teaching/202/08-fall/lectures/sort3/index.shtml
Copyright © 2008-2010 Mathias Ricken and Stephen Wong