堆排序原理图:
图源菜鸟教程
import java.util.Arrays;
public class HeapSort {
public static void main(String[] args) {
int[] arr = {7,4,6,2,6,8,3,7,1};
for(int p = arr.length-1;p>=0;p--){
heapSort(arr,p, arr.length);
}
for (int i =arr.length-1;i>0;i--){
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
heapSort(arr,0,i);
}
System.out.println(Arrays.toString(arr));
}
public static void heapSort(int[] arr,int parent,int length){
int temp = arr[parent];
int lchild = 2 * parent + 1;
while (lchild < length){
int rchild = lchild + 1;
if (rchild < length && arr[lchild] < arr[rchild]){
lchild++;
}
if(temp >= arr[lchild]){
break;
}
arr[parent] = arr[lchild];
parent = lchild;
lchild = 2 * lchild + 1;
}
arr[parent]=temp;
}
}