向上调整建堆和向下调整建堆的比较

目录

堆排序的时间复杂度分析

向下调整建堆 


我们上一篇文章讲解了向上调整建堆和向下调整建堆是什么,这一篇文章我们就仔细分析一下这两个建堆方式到底哪个比较好。

堆排序的时间复杂度分析

堆排序分为满二叉树和完全二叉树,下图是满二叉树,左边表示的是这一层的节点数,最后一排是2^(h-1)个节点,所以我们可以列出一个函数来

表示吗二叉树的节点个数,这个我们到后面一起写。还有一个就是完全二叉树,这个没有固定的节点个数,所以,我们讨论他的范围,最大值和最小值,最大值时是满二叉树时,最小值是最后一排只有一个节点时,这些都是很显而易见的,好,我们设树的高度为h,这时我们可以分别列出完全二叉树的节点个数了。 

好的,我们假设树的节点个数是N,那么我们可以用h将N表示出来 ,也可以用N将h表示出来,

如图所示,如果我们要插入一个节点,假如是最坏的那一种情况,比如从最后一层要调整到堆顶,那么,就要调整logN次,所以这个复杂度是logN级的。

铺垫做好了,我们开始讲解重头戏吧。

向下调整建堆 

 

假如这个堆我们要将他调整成小堆,那么我们要从第一排非叶子节点开始向下调整,h-1排要调整1次,h-2排要调整2次,以此类推 

就可以得到这样一个等差数列 * 一个等比数列,运用我们高中的知识,就是错位相减法,就可以得到  T(h)的 通项公式,然后将我们上面求得的h和N的关系式带入到上面,就可以得到T(N)的通项公式了,那么向下调整建堆的时间复杂度就是O(N - logN)

 向上调整建堆

其实和向下调整建堆差不多,也是一样的分析方式,列出通项公式,然后求得时间复杂度,这里就不过多赘述了。

 好,我们得到了两个建堆方式的时间复杂度,这时,我们就能分析那个效率更高了,

很显然,向下调整建堆的效率更高。

向下调整建堆和向上调整建堆的特点 

前者的特点就是:节点数越多的层,调整次数越少;

                             节点数越少的层,调整次数越多; 

后者的特点就是:节点数越多的层,调整次数越多;

                             节点数越少的层,调整次数越少;

但是最后一排的节点数量占比整个节点的二分之一,自然向下调整建堆的算法效率最高。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值