Heapsort: Putting it together!
Exercise Complete the implementation of HeapSort.sort
so it builds the head from bottom up (Floyd's method) and then sorts the collection in-place.
private static void sort(Integer[] data) {
// TODO Implement me
}
Note: Assume the following helper methods are correctly implemented:
private static void sink(Integer[] data, int index, int numNodes) {
// percolate down data[index] to restore heap order
// the percolation is bounded to go down no further than data[numNodes]
}
private static void swap(Integer[] data, int i, int j) {
// swap values between data[i] and data[j]
}
Solution
private static void sort(Integer[] data) {
// heapify
for (int i = numNodes / 2; i >= 1; i--) {
sink(data, i, numNodes);
}
// sort
for (int i = numNodes; i >= 1; i--) {
swap(data, 1, numNodes--); // remove best
sink(data, 1, numNodes); // restore order
}
}