//生成大顶堆方法
function dui(arr,i,length){
for(var j = 2*i+1;j<length;j=2*i+1){
var temp = arr[i]
if(j+1<length&&arr[j]<arr[j+1]){ //取左右子节点最大的
j++
}
if(temp<arr[j]){ //根节点与子节点交换
arr=jiaohuan(arr,i,j)
i=j //为了保证大顶堆结构向下置换
}else{
break
}
}
return arr
}
//交换数组两个元素方法
function jiaohuan(a,i,j){
var temp=a[i]
a[i]=a[j]
a[j]=temp
return a
}
//将数组生成大顶堆排序 一个数组有n个元素就会有 Math.floor(n/2)个根节点 数组下标从0开始
for(var i = Math.floor(x.length/2-1);i>=0;i--){
x=dui(x,i,x.length)
}
//将大顶堆排序
for(var i=x.length-1;i>0;i--){i
console.log(i)
x=jiaohuan(x,0,i)
x=dui(x,0,i)
}
js实现堆排序
最新推荐文章于 2024-05-12 14:23:18 发布