堆排序解析
来源:互联网 发布:淘宝代缴公积金靠谱么 编辑:程序博客网 时间:2024/06/15 09:37
首先要了解堆的性质,我这里简答总结一下(这里说的是小堆):
1、堆是一棵完全二叉树
2、对于大堆中的任何一个非叶子节点,节点的值必须小于左右孩子节点值。
由此可知,对于小堆而言,根节点就是最小值了,那么我们每次拿走根节点,拿走的顺序就是递增序列的。
排序的元素在数组中,而堆也是一棵完全二叉树,所以直接用数组表示二叉树。
对于完全二叉树中的K节点,其满足一下性质:
1、K节点的父节点为( k - 1 ) / 2
2、K节点的左子节点为2K + 1
3、K节点的右子节点为2K + 2
所以堆排序的步骤如下:
1、填充二叉树元素,由于我们直接用源数据表示二叉树,所以这里不用写了。
2、由堆的性质可知,任何叶子节点都是满足堆的性质的,所以找到第一个非叶子节点的节点,从该节点开始,调整所有节点,让他们满足堆的性质
3、移走堆的根节点,得到当前的最大值。
4、将最后一个节点移至根节点,此时除了根节点外其余节点都是满足要求的,重新调整堆,重复第3步。
由于建立的是小根堆,所以最后得到是将序列。
最后附一个堆排的动画
0 0
- 堆排序算法解析
- 堆排序解析
- 堆排序算法解析
- 堆排序算法解析
- 堆排序算法解析
- 堆排序算法解析
- 深度解析堆排序
- 堆排序算法解析
- 快速排序,堆排序解析
- 堆排序,希尔排序解析
- 堆排序算法复杂度解析
- c语言堆排序解析
- 八大排序算法之堆排序解析
- 一步一步解析java排序算法--堆排序(最小堆)
- 一步一步解析java排序算法---堆排序(最大堆)
- 排序算法中对堆排序的解析
- 堆排序:源码(C++)--伪代码--时间复杂度解析
- 堆及堆排序
- 网站搜索引擎优化:你需要多个域名?
- 最短路算法(Floyd、Dijsktra、Bellman-Ford、SPFA)
- JS控制图片显示的大小(图片等比例缩放)
- jquery.validate使用攻略 第五步 正则验证
- windows下mongodb安装与使用整理
- 堆排序解析
- 问题记录
- 获取指定字符前/后的字符串
- zoj1586 QS Network(最小生成树)
- 提高 ASP.NET Web 应用性能的 24 种方法和技巧
- websocket (html5新规范)
- Oracle 分块导出数据备份
- UDP调用connect
- raid技术的介绍跟总结