packagecom.hz.learn.sft;importjava.util.Arrays;publicclassZCHuiWen{publicstaticvoidmain(String[] args){int[] nums ={10,8,6,4,2,0,1,3,5,9,7};int len = nums.length;// 生成大顶堆px(nums, len);for(int i = len -1; i >0; i--){// 第一个和大顶堆最后一个交换exchangeNum(nums,0, i);System.out.println(Arrays.toString(nums));
len--;// 生成长度减一的大顶堆px(nums, len);}}/**
* 将对应数组指定长度内的数据生成大顶堆
*
* @param nums
* @param len
*/privatestaticvoidpx(int[] nums,int len){for(int i = len /2; i >=0; i--){buildTui(nums, i, len);}}/**
* 从最后一排的非叶子节点开始,让左右节点都不得大于他的父节点,直至根节点,完成大顶堆
*
* @param nums
* @param i
* @param len
*/privatestaticvoidbuildTui(int[] nums,int i,int len){int largest = i;int left = largest *2+1;int right = largest *2+2;if(left < len && nums[largest]< nums[left]){
largest = left;}if(right < len && nums[largest]< nums[right]){
largest = right;}if(i != largest){exchangeNum(nums, i, largest);}}privatestaticvoidexchangeNum(int[] nums,int i,int largest){int temp = nums[i];
nums[i]= nums[largest];
nums[largest]= temp;}}