public class HeapSort {
public static void main(String[] args) {
int[] array = new int[]{5, 3, 9, 1, 6, 4, 10, 2, 8, 7, 15, 3, 2};
System.out.println("Before: " + Arrays.toString(array));
sort(array);
System.out.println("After: " + Arrays.toString(array));
}
public static void sort(int[] arr) {
for (int i = arr.length; i > 0; i--) {
maxHeapify(arr, i);
swap(arr, 0, i - 1);
}
}
private static void maxHeapify(int[] arr, int size) {
int parentIdx = size / 2;
for (; parentIdx >= 0; parentIdx--) {
if (parentIdx * 2 >= size) {
continue;
}
int left = parentIdx * 2;
int right = (left + 1) >= size ? left : (left + 1);
int maxChildId = arr[left] >= arr[right] ? left : right;
if (arr[maxChildId] > arr[parentIdx]) {
swap(arr, maxChildId, parentIdx);
}
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}