十大经典排序算法
  • 十大经典排序算法-冒泡排序算法详解
  • 十大经典排序算法-选择排序算法详解
  • 十大经典排序算法-插入排序算法详解
  • 十大经典排序算法-希尔排序算法详解
  • 十大经典排序算法-快速排序算法详解
  • 十大经典排序算法-归并排序算法详解
  • 十大经典排序算法-堆排序算法详解
  • 十大经典排序算法-计数排序算法详解
  • 十大经典排序算法-桶排序算法详解
  • 十大经典排序算法-基数排序算法详解

一、什么是堆排序

1.概念

堆排序(Heapsort)是利用二叉堆的概念来排序的选择排序算法,分为两种:

  • 升序排序:利用最大堆进行排序
  • 降序排序:利用最小堆进行排序

2.算法原理

给定一个最大堆如下图所示,以该最大堆进行演示堆排序

首先,删除堆顶元素10(即最大的元素),并将最后的元素3补充到堆顶,删除的元素10,放置于原来最后的元素3的位置

根据二叉堆的自我调整,第二大的元素9会成为二叉堆新的堆顶

删除元素9,元素8成为最大堆堆顶

删除元素8,元素7成为最大堆堆顶

依次删除最大元素,直至所有元素全部删除

此时,被删除的元素组成了一个从小到大排序的序列

3.算法实现

// 下沉调整
// 最大堆
function downAdjust(arr, parentIndex, length) {// 缓存父节点的值,用于最后进行赋值,而不需要每一步进行交换let temp = arr[parentIndex];// 孩子节点下标,暂时定为左孩子节点下标let childIndex = 2 * parentIndex + 1;while (childIndex < length) {// 当存在右孩子节点,且右孩子节点的值小于左孩子节点的值,childIndex记录为右孩子节点的下标// childIndex实际记录的是最小的孩子节点的下标if (childIndex + 1 < length && arr[childIndex + 1] > arr[childIndex]) {childIndex++;}// 如果父节点的值比孩子节点的值都小,则调整结束if (temp >= arr[childIndex]) {break;}// 将最小的孩子节点的值赋值给父节点arr[parentIndex] = arr[childIndex];parentIndex = childIndex;childIndex = 2 * parentIndex + 1;}arr[parentIndex] = temp;
}// 堆排序
function sort(arr) {// 把无序数组构建成二叉堆for (let i = parseInt(arr.length / 2) - 1; i >= 0; i--) {downAdjust(arr, i, arr.length);}console.log(arr);// 循环删除堆顶元素,移到集合尾部,调节堆产生新的堆顶for (let i = arr.length - 1; i > 0; i--) {// 最后一个元素与第一个元素交换[arr[0], arr[i]] = [arr[i], arr[0]];downAdjust(arr, 0, i);}
}let arr = [10, 9, 8, 5, 6, 7, 1, 4, 2, 3];
sort(arr);
console.log(arr);

三、堆排序算法特点

1.时间复杂度

下沉调整的时间复杂度等同于堆的高度O(logn),构建二叉堆执行下沉调整次数是n/2,循环删除进行下沉调整次数是n-1,时间复杂度约为O(nlogn)

2.空间复杂度

堆排序算法排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)

3.稳定性

堆排序算法在排序过程中,相同元素的前后顺序有可能发生改变,所以堆排序是一种不稳定排序算法


另外推荐一个开发者小工具网站,个人觉得里面的Json格式化功能很强大,报错很详细

https://tinyutil.com/

还可以输入表达式进行内容选取,对于复杂json非常多层级的内容展现非常用用处

十大经典排序算法-堆排序算法详解相关推荐

  1. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  2. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 十大经典排序算法详解

    本文转自 <卢明冬的博客> 文章目录 排序算法的分析和评价 2.十大排序经典算法总览 2.1 排序算法的分类 2.2 排序算法的性能 2.3 各阶复杂度性能对比 2.4 排序算法的初始状态 ...

  6. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  10. 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七

    十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...

最新文章

  1. 雅虎中国弃门户回归搜索 推出新搜索产品线
  2. ROS中RVIS导入机器人模型,添加摄像头,雷达,Kinect
  3. 设计模式--中介者(Mediator)模式
  4. 信息系统项目管理师-第5章:项目范围管理-重点汇总
  5. 使用POI技术简单的将数据库中的数据读取出为Excel文件
  6. android中几种定位方式详解
  7. js获取字符串最后一个字符代码
  8. java参数注解pam_吃透Java基础十:注解
  9. Xshell连接Ubuntu时提示SSH服务器拒绝了密码
  10. vscode 语法检查_Jenkins 声明式流水线的语法错误检查
  11. 苹果或已放弃3月发布廉价新iPhone;贾跃亭回应家人巨额索赔;微软不再继续开发 Visual Basic | 极客头条...
  12. sqlite工作记录-1数据库数据写入-转
  13. java jdbc 占位符_java-jdbc
  14. 纵向合并gridview单元格的两种方法
  15. HP服务器raid卡型号b110i安装2008R2认不到硬盘缺少硬盘驱动
  16. 2018 CSDN博客之星评选,请投我一票~
  17. 最快的进制转换法之一,8421
  18. 类ChatGPT的部署与微调(上):从LLaMA、Alpaca/Vicuna/BELLE、中文版
  19. cpu、内存、磁盘、操作系统的关系
  20. css3的@media

热门文章

  1. 计算机组装维修中级试题,维修电工中级培训考试题及答案
  2. 2021年烷基化工艺考试内容及烷基化工艺考试资料
  3. 搭建公司wiki系统
  4. 概率论中的不等式(Markov不等式、Chebyshev不等式、Jensen不等式)
  5. 蔡学镛 java,Java该何去何从思考
  6. 软考软件设计师中级考试(二)——操作系统基本原理
  7. python面试题:python计算股票收益最大化
  8. 国际大牌在中国的故事
  9. 论文中的三线表及表格规范
  10. python 问卷调查系统_GitHub - JukieChen/surveySystem-1: 问卷调查系统