特性:

排序方法 时间复杂度 空间复杂度 稳定性
堆排序 O(nlogn) O(1) 不稳定

思路:

实现:

  1. function sort(a) {
  2. let N = a.length;
  3. // 从右至左,通过下沉构造堆
  4. for (let k = parseInt(N / 2); k >= 1; k--) sink(a, k, N);
  5. while(N > 1) {
  6. // 将顶部最大的替换到底部
  7. exch(a, 1, N--);
  8. // 重新下沉,下沉完成后会出现第2,3,4....N - 1大的值置换到顶部
  9. // 执行同样的操作,最终会形成一个有序二叉堆
  10. sink(a, 1, N);
  11. }
  12. }

image.png