经典排序算法 - 堆排序Heap sort
来源:互联网 发布:python 作图 编辑:程序博客网 时间:2024/05/16 09:56
经典排序算法 - 堆排序Heap sort
堆排序有点小复杂,分成三块
第一块,什么是堆,什么是最大堆
第二块,怎么将堆调整为最大堆,这部分是重点
第三块,堆排序介绍
第一块,什么是堆,什么是最大堆
什么是堆
这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。
堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素.
数组与堆之间的关系
二叉堆一般分为两种:最大堆和最小堆。
什么是最大堆
堆中每个父节点的元素值都大于等于其孩子结点(如果存在),这样的堆就是一个最大堆
因此,最大堆中的最大元素值出现在根结点(堆顶)
节点与数组索引关系
对于给定的某个结点的下标i,可以很容易的计算出这个结点的父结点、孩子结点的下标,而且计算公式很漂亮很简约
第二块,怎么将堆调整为最大堆,这部分是重点
整个过程如下图所示
在4,14,7这个小堆里边,父节点4小于左孩子14,所以两者交换
在4,2,8这个小堆里边,父节点4小于右孩子8,所以两者交换
上图展示了一趟调整的过程,这个过程递归实现,直到调整为最大堆为止
第三块,堆排序介绍
堆排序就是把堆顶的最大数取出,
将剩余的堆继续调整为最大堆,具体过程在第二块有介绍,以递归实现
剩余部分调整为最大堆后,再次将堆顶的最大数取出,再将剩余部分调整为最大堆,这个过程持续到剩余数只有一个时结束
下边三张图详细描述了整个过程
0 0
- 经典排序算法 - 堆排序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入门项目1:简易计算器
- DP——hihorCoder 1469
- [BZOJ1316]树上的询问(点分治+二分)
- webrtc官方下载(windows)
- 【微信抢红包】红包助手-修改版
- 经典排序算法 - 堆排序Heap sort
- java中访问修饰符
- 12.PackageManager&&Popwindow必须设置背景
- Linux 自检和 SystemTap
- Java中的语句错误总结(不定期更新)
- .NET 十五岁,谈谈我眼中的.NET
- 【软件测试】功能测试
- 数据结构上机练习(2) 单链表
- PAT A1101. Quick Sort (25)