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