堆排序
堆排序
堆排序是指利用堆这种数据结构所设计的一种排序算法。近似于完全二叉树,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。它的时间复杂度是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]));

浙公网安备 33010602011771号