经典排序算法 - 堆排序Heap sort

堆排序有点小复杂,分成三块

第一块,什么是堆,什么是最大堆

第二块,怎么将堆调整为最大堆,这部分是重点

第三块,堆排序介绍


第一块,什么是堆,什么是最大堆

什么是堆

这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。

堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素.

数组与堆之间的关系

二叉堆一般分为两种:最大堆和最小堆。

什么是最大堆

堆中每个父节点的元素值都大于等于其孩子结点(如果存在),这样的堆就是一个最大堆

因此,最大堆中的最大元素值出现在根结点(堆顶)

节点与数组索引关系

对于给定的某个结点的下标i,可以很容易的计算出这个结点的父结点、孩子结点的下标,而且计算公式很漂亮很简约

第二块,怎么将堆调整为最大堆,这部分是重点

整个过程如下图所示

在4,14,7这个小堆里边,父节点4小于左孩子14,所以两者交换

在4,2,8这个小堆里边,父节点4小于右孩子8,所以两者交换

上图展示了一趟调整的过程,这个过程递归实现,直到调整为最大堆为止

第三块,堆排序介绍

堆排序就是把堆顶的最大数取出,

将剩余的堆继续调整为最大堆,具体过程在第二块有介绍,以递归实现

剩余部分调整为最大堆后,再次将堆顶的最大数取出,再将剩余部分调整为最大堆,这个过程持续到剩余数只有一个时结束

下边三张图详细描述了整个过程


参考文章

http://blog.kingsamchen.com/archives/547#viewSource

返回主目录 [经典排序算法][集锦]

经典排序算法 - 堆排序Heap sort相关推荐

  1. 经典排序算法 - 冒泡排序Bubble sort

    经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...

  2. 经典排序算法 - 归并排序Merge sort

    经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 ...

  3. 排序算法之 Heap Sort

    Heap Sort (cpp_heap_sort.cc) ======================================================================= ...

  4. 十大经典排序算法----堆排序(超详细)

    目录 1. 堆排序的基础知识 1.1 大顶堆&&小顶堆 1.2 向下调整算法 1.3 物理结构与逻辑结构的关系 2. 堆排序详解 2.1 堆排序整体思路 2.2 思路详解 2.2.1  ...

  5. [经典排序算法][集锦]

    经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者 ...

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

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

  7. C语言堆排序Heap Sort算法(附完整源码)

    堆排序Heap Sort算法 堆排序Heap Sort算法的完整源码(定义,实现,main函数测试) 堆排序Heap Sort算法的完整源码(定义,实现,main函数测试) #include < ...

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

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

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

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

最新文章

  1. ORA-08002: sequence MySeq.currval is not yet defined in this session
  2. 双一流高校竟有超30所都筹建了医学院!这释放了什么信号?
  3. oracle中国授权机构查询,oracle授权查询
  4. 化工原理 蒸馏(下)
  5. 初探swift语言的学习笔记八(保留了许多OC的实现)
  6. Ubuntu Server如何配置SFTP
  7. [SNOI2017]遗失的答案 (FWT)
  8. 计算方法太牛了,留着以后教孩子!!!
  9. Nginx开启stub_status模块配置方法_nginx
  10. Keras requires TensorFlow 2.2 or higher怎么办?
  11. string类的构造函数,拷贝构造函数,析构函数和赋值函数
  12. Handler BlockViewHandler has a bad module ManagedPipelineHandler in its module list
  13. 百度回应百科外链遭篡改:严厉打击 已报案
  14. 【Flink】 Flink JobManager HA 机制的扩展与实现
  15. 程序员输入法_搜狗输入法高级玩法:如何1秒录入30000字
  16. 怎么使用Vegas制作炫彩灯光效果?
  17. 敏捷开发一千零一问:怎样处理重要但不明白的任务?
  18. Linux修改hosts主机映射文件
  19. 一款医疗设备用超高耐压的千兆单口网络变压器H82407SG
  20. 微信小程序开发工具使用方法

热门文章

  1. 上位机获取单片机发来的数据并进行检验
  2. mysql 跨域_解决go echo后端处理跨域的两种操作方式
  3. 关于(我们流量表优化),分区表数据块过多,聚合又导致数据倾斜问题
  4. .NET存储过程入门
  5. thinkinjava21.4.4----java中interrupt和interrupted方法的使用和线程退出的时机
  6. 买房一定要知道的购房误区 买涨不买跌的心态可能得改
  7. Transfer Execute Redirect重定向方法介绍
  8. input file 选择文件后自动上传文件
  9. 诗和远方:无题(四十六)
  10. Python学习笔记之if语句(一)