经典排序算法 - 堆排序Heap sort
来源:互联网 发布:中山大学软件工程硕士 编辑:程序博客网 时间:2024/05/16 08:07
经典排序算法 - 堆排序Heap sort
堆排序有点小复杂,分成三块
第一块,什么是堆,什么是最大堆
第二块,怎么将堆调整为最大堆,这部分是重点
第三块,堆排序介绍
第一块,什么是堆,什么是最大堆
什么是堆
这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。
堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素.
数组与堆之间的关系
二叉堆一般分为两种:最大堆和最小堆。
什么是最大堆
堆中每个父节点的元素值都大于等于其孩子结点(如果存在),这样的堆就是一个最大堆
因此,最大堆中的最大元素值出现在根结点(堆顶)
节点与数组索引关系
对于给定的某个结点的下标i,可以很容易的计算出这个结点的父结点、孩子结点的下标,而且计算公式很漂亮很简约
第二块,怎么将堆调整为最大堆,这部分是重点
整个过程如下图所示
在4,14,7这个小堆里边,父节点4小于左孩子14,所以两者交换
在4,2,8这个小堆里边,父节点4小于右孩子8,所以两者交换
上图展示了一趟调整的过程,这个过程递归实现,直到调整为最大堆为止
第三块,堆排序介绍
堆排序就是把堆顶的最大数取出,
将剩余的堆继续调整为最大堆,具体过程在第二块有介绍,以递归实现
剩余部分调整为最大堆后,再次将堆顶的最大数取出,再将剩余部分调整为最大堆,这个过程持续到剩余数只有一个时结束
下边三张图详细描述了整个过程
- 经典排序算法 - 堆排序Heap sort
- 经典排序算法 - 堆排序Heap sort
- 经典排序算法 - 堆排序Heap sort
- 经典排序算法 - 堆排序Heap sort
- 经典排序算法:堆排序(Heap Sort)
- 算法----堆排序(heap sort)
- 选择排序算法:堆排序-Heap Sort
- 排序算法---堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序 (Heap Sort)
- 堆排序(Heap Sort)
- heap sort 堆排序
- 堆排序 Heap Sort
- 堆排序 Heap Sort
- 堆排序 (Heap Sort)
- 堆排序Heap sort
- Android 多样式ProgressBar、ProgressDialog,自定义ProgressBar样式
- linux-arm中断系统之中断过程
- 题目1159: 单词替换
- 求一个数的所有正整数的所有约数
- 详解MPEG-4
- 经典排序算法 - 堆排序Heap sort
- js call
- Android内搜索引擎的改造
- 工厂(factory)模式
- e-企业管理解决方案-生产管理系统
- Oracle Data Guard (三) Switchover
- Java起底扫盲
- java--你可能忽略的细节(一)
- 你类型了吗?