1: // @author Frank M. Carrano, Timothy M. Henry
2: // @version 5.0
3: private static <T extends Comparable<? super T>>
4: void reheap(T[] heap, int rootIndex, int lastIndex)
5: {
6: boolean done = false;
7: T orphan = heap[rootIndex];
8: int leftChildIndex = 2 * rootIndex + 1;
10: while (!done && (leftChildIndex <= lastIndex))
11: {
12: int largerChildIndex = leftChildIndex;
13: int rightChildIndex = leftChildIndex + 1;
15: if ( (rightChildIndex <= lastIndex) &&
16: heap[rightChildIndex].compareTo(heap[largerChildIndex]) > 0)
17: {
18: largerChildIndex = rightChildIndex;
19: } // end if
21: if (orphan.compareTo(heap[largerChildIndex]) < 0)
22: {
23: heap[rootIndex] = heap[largerChildIndex];
24: rootIndex = largerChildIndex;
25: leftChildIndex = 2 * rootIndex + 1;
26: }
27: else
28: done = true;
29: } // end while
31: heap[rootIndex] = orphan;
32: } // end reheap