堆排序算法之初始堆建立总结
2016-12-01 23:52
633 查看
堆排序算法之初始堆建立总结
@(算法学习)关于堆的插入和删除有过一篇思考,但是关于初始堆的构建,没有总结。
简单说就下面几个要点(以大顶堆为例):
首先根据序列构建一个完全二叉树
在完全二叉树的基础上,从最后一个非叶结点开始调整:比较三个元素的大小–自己,它的左孩子,右孩子。分为三种情况:
自己最大,不用调整
左孩子最大,交换该非叶结点与其左孩子的值,并考察以左孩子为根的子树是否满足大顶堆的要求,不满足递归向下处理
右孩子最大,交换该非叶结点与其右孩子的值,并考察以右孩子为根的子树是否满足大顶堆的要求,不满足递归向下处理
就这些基本要求,就可以解决这一类的手工计算问题。举个例子:
比如:一组记录(5,11,7,2,3,17)利用大顶堆排序方法建立初始堆为?
分析:首先建立完全二叉树。
再从最后一个非叶结点开始调整。
第一次交换7,17的位置。
11不用调整。
最后调整根结点。
此时把5换下去后,以5为根的子树不满足大顶堆的要求,因此再调整。
即最终的初始堆是:17,11,7,2,3,5.
相关文章推荐
- BGP多跳建立邻居实验总结
- 建立数据字典的一点总结
- 如何在apache中建立svn版本库svn问题总结
- 总结:怎么建立无模式对话
- Eclipse初始安装配置及常见问题总结
- oracle中建立job定期运行存储过程总结
- Oracle建立DBLINK的操作经验总结
- Oracle建立DBLINK的操作经验总结
- magento转移服务器和magento建立多站点总结
- oracle中建立job定期运行存储过程总结
- oracle中建立job定期运行存储过程总结
- 两台服务器之间建立虚拟目录_____总结
- 数据库建模工具PowerDesigner建立索引总结
- EXCHANGE2003总结系列-4:SMTP连接器建立完成后,作过滤是不是不生效,用我下面的小程序解决。
- CCIE朋友原创--Q版OSPF初始邻居建立过程
- oracle中建立job定期运行存储过程总结
- ExtJS建立大型项目应用教程实例总结Tutorial:Writing a Big Application in Ext
- 堆排序算法总结!
- 总结体验1:就比如上面自己写的单链表建立这样的程序,其实明明知道输出单链表不能从头结点开始输入,而是要在第一个节点开始
- java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)