堆排序
堆排序
堆排序是指利用堆这种数据结构所设计的一种排序算法。近似于完全二叉树,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。它的时间复杂度是O(nlog2(n)),空间复杂度是O(1),其算法不稳定。
var length;//因为声明的多个函数都需要数据长度,所以把len设置成为全局变量 //建立大顶堆 function buildMaxHead(arr) { length = arr.length; for (var i = parseInt(length/2); i>=0; i--) { heapify(arr,i); } } //堆调整 function heapify(arr,i) { var left = 2*i+1; var right = 2*i+2; var largest = i; if(left<length&&arr[left]>arr[largest]){ largest = left; } if(right<length&&arr[right]>arr[largest]){ largest = right; } if(largest!=i){ swap(arr,i,largest); heapify(arr,largest); } } //交换两个数 function swap(arr,i,j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //堆排序 function heapSort(arr) { buildMaxHead(arr); for ( var i = arr.length-1; i >0; i--) { //console.log(arr); swap(arr,0,i); length--; heapify(arr,0); } return arr; } console.log(heapSort([10,3,5,6,2,7,9,4,0,2,5]));