package pers.yue.algoflow;
public class Heap {
static int HEAPSIZE;
public static void maxHeapify(int[] array, int i) {
int l = 2 * i + 1;
int r = 2 * i + 2;
int largest;
if (l <= HEAPSIZE && array[l] > array[i]) {
largest = l;
} else {
largest = i;
}
if (r <= HEAPSIZE && array[r] > array[largest]) {
largest = r;
}
if (largest != i) {
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
maxHeapify(array, largest);
}
}
public static void buildMaxHeap(int[] array) {
HEAPSIZE = array.length - 1;
for (int i = (array.length - 1) / 2; i >= 0; i--) {
maxHeapify(array, i);
}
}
public static void heapSort(int[] array) {
buildMaxHeap(array);
for (int i = array.length - 1; i > 0; i--) {
int temp = array[i];
array[i] = array[0];
array[0] = temp;
HEAPSIZE--;
maxHeapify(array, 0);
}
}
}