堆排序代码实现(Java实现)
堆排序最重要的一点是将初始的无序堆转换成大顶堆或者是小顶堆;见代码:
1 package dataSrtuct.TreeAlgorithm; 2 3 import java.util.Arrays; 4 5 public class HeapSort { 6 public static void main(String[] args) { 7 int[] arr={4,6,8,5,9}; 8 //此时已经成大顶堆的形式 9 for (int i = arr.length/2-1; i >=0 ; i--) { 10 //从最后一个非叶子节点调整 11 adjustHeap(arr,i, arr.length); 12 } 13 for (int i = arr.length-1; i >=0 ; i--) { 14 int temp=arr[i]; 15 arr[i]=arr[0]; 16 arr[0]=temp; 17 adjustHeap(arr,0, i); 18 } 19 System.out.println(Arrays.toString(arr)); 20 } 21 /** 22 * 来进行大顶堆的的局部调整 23 * @param arr 待调整的数组 24 * @param i 当前的非叶子节点 25 * @param length 待调整的数组的长度 26 */ 27 public static void adjustHeap(int[] arr,int i,int length){ 28 //临时的报错当前非叶子节点的位置 29 int temp=arr[i]; 30 //将所有层的左右子节点进行比较,判断并得到最大值 31 for (int j = i*2+1; j < length; j=j*2+1) { 32 if(j+1<length&&(arr[j]<arr[j+1])) 33 j++; 34 if (arr[j]>temp){ 35 //取最大值 36 arr[i]=arr[j]; 37 //指向最大值下标,继续往下找最大值 38 i=j; 39 } 40 else 41 break; 42 } 43 arr[i]=temp; 44 } 45 }

浙公网安备 33010602011771号