特性:
排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|
堆排序 | O(nlogn) |
O(1) |
不稳定 |
思路:
实现:
function sort(a) {
let N = a.length;
// 从右至左,通过下沉构造堆
for (let k = parseInt(N / 2); k >= 1; k--) sink(a, k, N);
while(N > 1) {
// 将顶部最大的替换到底部
exch(a, 1, N--);
// 重新下沉,下沉完成后会出现第2,3,4....N - 1大的值置换到顶部
// 执行同样的操作,最终会形成一个有序二叉堆
sink(a, 1, N);
}
}