HeapSort { public static <T> T[] heapSort(T[] array, Comparator<T> comparator) { Heap<T> heap = new SimpleHeapImpl<T>(array, comparator); for (int index = array.length - 1; !heap.isEmpty(); index--) { try { array[index] = heap.pop(); } catch (EmptyHeapException e) { throw new RuntimeException(e); } } return array; }  static T[] heapSort(T[] array, Comparator<T> comparator);  }
@Test public void ascendingOrderSort() { Integer[] array = { 5, 4, 3, 2, 1 }; Integer[] sorted = HeapSort.heapSort(array, ascOrderComparator); assertArrayEquals("Failure => Array returned is not sorted.", sorted, new Integer[] { 1, 2, 3, 4, 5 }); }
@Test public void descendingOrderSort() { Integer[] array = { 1, 2, 3, 4, 5 }; Integer[] sorted = HeapSort.heapSort(array, descOrderComparator); assertArrayEquals("Failure => Array returned is not sorted.", sorted, new Integer[] { 5, 4, 3, 2, 1 }); }
@Test public void randomOrderSort() { Integer[] array = { 5, 1, 3, 2, 4 }; Integer[] sorted = HeapSort.heapSort(array, ascOrderComparator); assertArrayEquals("Failure => Array returned is not sorted.", sorted, new Integer[] { 1, 2, 3, 4, 5 }); }