public static void adjustHeap(int arr[],int i,int length){
//目的是将以i为根节点的二叉树 转成大顶堆 且步骤应自左向右,自底向上,从非叶节点开始
int temp=arr[i];
for (int k = i*2+1; k <length ; k=k*2+1) {//当前节点的左子节点
if (k+1<length&&arr[k]<arr[k+1]){
k++;
}
if (arr[k]>temp){//大了就交换,小了不管
arr[i]=arr[k];
arr[k]=temp;
i=k;
}
}
}
第一步 定义函数,将以i为根节点的二叉树 转成大顶堆 且步骤应自左向右,自底向上
每次排在第一位的 也就是arr[0]总为整个数组最大的值
public static void heapSort(int arr[]){
for (int j=arr.length;j>0;j--){
adjustHeap(arr,0,j);
temp=arr[j-1];
arr[j-1]=arr[0];
arr[0]=temp;
}
第二步 第一位 与最后一位 换位 继续遍历剩余数组