堆排序代码实现(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 }

 

posted @ 2023-05-17 20:23  Mexcellent  阅读(110)  评论(0)    收藏  举报