- 堆排序:先构建一个最大/最小二叉堆(子结点的键值或索引总是小于(或者大于)它的父节点),然后不停的取出最大/最小元素(头结点),插入到新的队列中,以此达到排序的目的
- 时间复杂度:O(nlgn)
- 稳定性:不稳定
- 复杂性:较复杂
- 应用:数据量大的情况
const adjustHeap = (arr,i,len) => {
let temp = arr[i]
for(let j = 2*i+1;j < len;j = j*2+1){
if(j < len-1 && arr[j] < arr[j+1]){
j++
}
if(arr[j] > temp){
arr[i] = arr[j]
i = j
}
}
arr[i] = temp
}
const heapSort = (arr) => {
const length = arr.length
if (length <= 1) {
return arr
}
let i
for(i = length/2-1;i >= 0;i--){
adjustHeap(arr,i,length)
}
for(i = length-1;i > 0;i--){
[arr[0], arr[i]] = [arr[i], arr[0]]
adjustHeap(arr,0,i-1)
}
return arr
}
上一篇:js实现选择排序
下一篇:js实现归并排序
本文为本人学习总结,如有雷同,可联系本人立即修改或者删除