设为首页 加入收藏

TOP

堆排序+代码实现
2015-07-20 17:44:06 来源: 作者: 【 】 浏览:1
Tags:排序 代码 实现

堆排序

堆,heap,是二叉树的一种。小根堆有这样的性质——任意一个结点的值比它的左右孩子都要小。

排序思想

将待排元素看作是完全二叉树,物理上用一维数组存储。

实现堆排序需要解决两个问题:

1.如何将杂乱的完全二叉树初始化为一个堆?

答:从最后一个非叶结点起,将该节点当做根,自上而下进行调整,使之成为一个堆。然后依次对倒数第二个、倒数第三个、直至正数第一个结点进行此操作。

2.输出堆顶元素后,如何将余下的元素调整为一个堆?

答:将最后一个结点放在原根结点位置上,以它为根进行上述的调整。

复杂度分析。

二叉树的层数计算方法,从上往下,1,2,3,4......

耗时的操作有构造初始堆和调整堆两部分。

对深度为h的堆进行自上而下的调整,最多比较次数为2*(h-1)。

在初始化堆的过程中,完全二叉树的高度为h,总的比较次数为

?

\

综上,堆排序在复杂度最坏的情况下为O((1)式+(2)式)=O(n*logn)。

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇TopCoder SAM 632 DIV2 下一篇HDU 3700 Cat

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)