Rice University - Comp 212 - Intermediate Programming

Spring 2008

Lecture #37: Heaps and Heap Sort; Merge Sort, Quick Sort


Heap Sort


How is split() sped up?



What is a Heap?



Implementing a Heap?



Heap Sort Basics



Heap Sort: split()

public int split(int[] A, int lo, int hi) {
    // Swap A[hi] and A[lo].
    int temp = A[hi];
    A[hi] = A[lo];
    A[lo] = temp;

    // Restore the heap property by ``sifting down''
    //  the element at A[lo].
    Heapifier.Singleton.siftDown(A, lo, lo, hi - 1);

    return hi;
}


Example of siftDown()



siftDown(): The Implementation

public void siftDown(int[] A, int lo, int cur, int hi) {
    int dat = A[cur];             // hold on to data.
    int child = 2 * cur + 1 - lo; // index of left child of A[cur].
    boolean done = hi < child;

    while (!done) {

        if (child < hi && A[child + 1] > A[child]) {
            child++;
        } // child is the index of the larger of the two children.

        if (A[child] > dat) {
            A[cur] = A[child];
            cur = child;
            child = 2 * cur + 1 - lo;
            done = hi < child;
        }                     // A[cur] is greater than its children.
        else {                // A[cur] >= A[child].
            done = true;      // heap condition is satisfied.
        }                     // A[cur] is greater than its children.
    }                         // location found for dat.
    A[cur] = dat;
}


Initializing the Heap: HeapSorter()

public class HeapSorter extends ASorter {
    public HeapSorter(int[] A, int lo, int hi)  {
        for (int cur = (hi - lo + 1) / 2; cur >= lo; cur--) {
            Heapifier.Singleton.siftDown(A, lo, cur, hi);
        }
    }
  // etc. . .
}

Merge Sort and Quick Sort

Link to Merge Sort and Quick Sort Notes

Link to Merge Sort  Code

Link to Quick Sort Code


Summary of Sorting

 
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)

By Alan Cox and Dung "Zung" Nguyen

Last Revised 03/31/2008 09:32 AM