堆排序

  堆排序是指利用堆这种数据结构所设计的一种排序算法。近似于完全二叉树,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。它的时间复杂度是O(nlog2(n)),空间复杂度是O(1),其算法不稳定。

 1 var length;//因为声明的多个函数都需要数据长度,所以把len设置成为全局变量
 2 //建立大顶堆
 3 function buildMaxHead(arr) { 
 4     length = arr.length;
 5     for (var i = parseInt(length/2); i>=0; i--) {
 6         heapify(arr,i);
 7     }
 8 }
 9 //堆调整
10 function heapify(arr,i) {
11     var left = 2*i+1;
12     var right = 2*i+2;
13     var largest = i;
14     if(left<length&&arr[left]>arr[largest]){
15         largest = left;
16     }
17     if(right<length&&arr[right]>arr[largest]){
18         largest = right;
19     }
20     if(largest!=i){
21         swap(arr,i,largest);
22         heapify(arr,largest);
23     }
24 }
25 //交换两个数
26 function swap(arr,i,j) {
27     var temp = arr[i];
28     arr[i] = arr[j];
29     arr[j] = temp;
30 }
31 //堆排序
32 function heapSort(arr) {
33     buildMaxHead(arr);
34     for ( var i = arr.length-1; i >0; i--) {
35         //console.log(arr);
36         swap(arr,0,i);
37         length--;
38         heapify(arr,0);
39     }
40     return arr;
41 }
42 console.log(heapSort([10,3,5,6,2,7,9,4,0,2,5]));

 

posted on 2018-10-08 10:53  大黑ylx  阅读(111)  评论(0)    收藏  举报