美文网首页
排序算法7-堆排序

排序算法7-堆排序

作者: 小杰66 | 来源:发表于2021-04-19 20:58 被阅读0次

堆排序

  • 平均时间复杂度:O(nlogn)
  • 最好情况:O(nlogn)
  • 最坏情况:O(nlogn)
  • 空间复杂度:O(1)
  • 排序方式:In-place
  • 稳定性:不稳定

算法步骤:
1.创建一个堆
2.将堆构造成大顶堆,从最后一个非叶子节点往前,把最大值交换到堆首。
3.把堆首和堆尾互换,即把最大值放到了堆尾。
4.将堆的长度减1,即剔除了最大值然后重复开始步骤2,直到堆的尺寸为1。

function swap(arr, a, b) {
  let temp = arr[a];
  arr[a] = arr[b];
  arr[b] = temp;
}
function heapify(arr, i, len) {
  let son = i * 2 + 1;
  if (son >= len) return;
  if (son + 1 < len && arr[son] < arr[son + 1]) son++;
  if (arr[i] < arr[son]) {
    swap(arr, i, son);
    heapify(arr, son, len);
  }
}

function heapSort(arr) {
  let len = arr.length;
  //第一次需要对所有非叶子节点操作
  for (let i = (len >> 1) - 1; i >= 0; i--) {
    heapify(arr, i, len);
  }
  //第二次开始由于只有顶节点兑换了,所以只需要对顶节点操作就行了
  for (let i = len - 1; i > 0; i--) {
    swap(arr, 0, i);
    len--;
    heapify(arr, 0, len);
  }
}

相关文章

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 排序算法7-堆排序

    堆排序 平均时间复杂度:O(nlogn) 最好情况:O(nlogn) 最坏情况:O(nlogn) 空间复杂度:O(...

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 2018-06-30

    排序算法之堆排序 堆排序是利用堆的数据结构而设计的一种排序算法,堆排序是一种选择排序。可以利用数组的特点快速定位制...

  • 堆排序算法思想

    前两天看了看堆排序算法,啃了半天的书,最后搞明白了堆排序算法,今天有时间给大家说说这个堆排序算法。首先讲一下算法的...

  • 常用排序算法之堆排序

    堆排序算法 运行 输出

网友评论

      本文标题:排序算法7-堆排序

      本文链接:https://www.haomeiwen.com/subject/nkkhlltx.html