1堆排序步骤(以升序为例,数组末尾为排序后的最大值):从最后一个非叶子节点开始(叶子节点不自然需要调整,第一个非叶子节点arr.length/2-1),从左到右,从下到上调整,最后将一个无序序列构造成一个大根堆,此时序列头是最大值。将头元素与尾元素交换,使尾元素最大,即把最大的元素“下沉”到数组尾部。然后继续调整堆;然后将堆顶元素与次端元素交换,得到第二大元素;如此重复交换、重构、交换。导入java.util.ArrayList;导入java.util.Arrays;公共类HeapSort{publicstaticvoidmain(String[]args){int[]arr={7,6,7,11,5,12,3,0,1};System.out.println("排序前:"+Arrays.toString(arr));排序(arr);System.out.println("排序后:"+Arrays.toString(arr));}publicstaticvoidsort(int[]array){//1.构建大顶堆//从第一个非叶子节点开始,从左到右,从下到上调整for(inti=array.length/2-1;i>=0;i--){adjustHeap(数组,我,array.length);}//2。反复交换堆顶元素和堆尾元素,最终完成排序for(inti=array.length-1;i>0;i--){swap(array,0,i);adjustHeap(数组,0,i);}}//调整大顶堆//len表示调整到数组的元素个数,例如第n轮交换就是倒数第n个元素与top交换,则len=array.length-npublicstaticvoidadjustHeap(int[]array,intindex,intlen){inttemp=array[index];for(inti=index*2+1;i
