package com.heu.wsq.basic.sort_algorithm;
import java.util.Arrays;
public class HeapSort {
public static void heapSort(int[] arr){
for(int i = (arr.length / 2); i >= 0; i--){
downAdjust(i, arr.length, arr);
}
for(int i = arr.length - 1; i > 0; i--){
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
downAdjust(0, i, arr);
}
}
private static void downAdjust(int parentIndex, int length, int[] arr) {
if(length == 0 || parentIndex < 0){
return;
}
int temp = arr[parentIndex];
int childIndex = 2 * parentIndex + 1;
while(childIndex < length){
int rightChild = childIndex + 1;
if(rightChild < length && arr[rightChild] > arr[childIndex]){
childIndex += 1;
}
if(temp >= arr[childIndex]){
break;
}
arr[parentIndex] = arr[childIndex];
parentIndex = childIndex;
childIndex = 2* parentIndex + 1;
}
arr[parentIndex] = temp;
}
public static void main(String[] args) {
int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};
heapSort(arr);
System.out.println(Arrays.toString(arr));
}
}