package sort;
import java.util.Arrays;
public class HeapSort {
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/*public static boolean less(int[] arr, int i, int j) {
return arr[i] < arr[j] ? true : false;
}*/
public static void sink(int[] arr, int k, int N) {
while ((2 * k + 1) < N) {
int j = 2 * k + 1;
if (j < N && arr[j]<arr[j+1]) {
j++;
}
if (arr[k]>arr[j+1]) {//k大于子节点中最大的节点,不交换
break;
}
swap(arr, k, j);
k = j;
}
}
public static void heapSort(int[] arr) {
int N = arr.length - 1;
for (int k = (N-2)/2; k >= 0; k--) {
sink(arr, k, N);
}
while (N > 0) {
swap(arr, 0, N--);
sink(arr, 0, N);
}
}
public static void main(String[] args) {
int[] arr = {1,1,0,0,9,8,7,6,5,4,3,2,1};
heapSort(arr);
System.out.println(Arrays.toString(arr));
}
}