首页 > 编程语言 > 详细

堆排序

时间:2016-08-14 14:26:00      阅读:256      评论:0      收藏:0      [点我收藏+]

堆排序,首先对初始化的堆进行下虑操作使得堆满足堆序。也就是建堆的过程。

然后将堆顶元素与堆尾元素互换,在进行delete堆顶操作。

 1 private static int[] heapSort(int[] arr) {
 2         if (arr==null||arr.length<2) {
 3             return arr;
 4         }
 5         for (int i = arr.length/2; i>=0; i--) {
 6             percDown(arr, i, arr.length);     // buildHeap;
 7         }
 8         for(int i=arr.length-1;i>0;i--){
 9             swap(arr, 0, i);
10             percDown(arr, 0, i);  //deleteMax;
11         }
12             return arr;
13     }
14     
15     private static void percDown(int[] arr,int index,int len) {
16         int child=0,tmp=0;
17         for (tmp=arr[index]; leftChild(index) < len; index=child) {
18             child=leftChild(index);
19             if(child!=len-1&&arr[child]<arr[child+1])
20                 child++;
21             if (tmp<arr[child]) 
22                 arr[index]=arr[child];
23         }
24         arr[index]=tmp;
25     }
26     
27     private static int leftChild(int i) {
28         return 2*i+1;
29     }
30     
31     private static void swap(int[] arr, int j, int i) {
32         int tmp=arr[j];
33         arr[j]=arr[i];
34         arr[i]=tmp;
35     }

 

堆排序

原文:http://www.cnblogs.com/peng111/p/5770053.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!