堆排序的时间复杂度分析

关于初始化堆:

因为初始化堆,是每个数据向下冒泡,每一层冒泡的次数不同,最高层冒泡的次数最多为logn,最底层为1次,设共有h层(h=logn) , 时间复杂度的计算为:1*h+2*(h-1)+4*(h-2)+...+2^(h-1)*1

即【节点数*所在层数】的累加,如2*(h-1)即第二层有两个节点,因为在第二层,所以会冒泡h-1次

可以转化为通项:2^{k}*(h-k) 

k从0到h-1的累加 用错项相减法求 可以得到O(2^{h+1}-2-h),即O(2^{h})即O(n)

关于调整堆/删除堆:

因为在调整的时候,每调整/删除一次,树的节点就会少一个(跑到有序堆去了),然鹅每次调整的时候,是从下往上冒泡的,所以调整的次数即当前树的层数,那怎么确定当前树的层数呢,直接对当前节点取对数就好了,每一个节点都要进行这样的操作,所以操作的次数是log(n-1)+log(n-2)+...+log2+log1=log(n-1)!=nlogn这个的证明我看了下面这个大佬的链接:)

log(n!) = Θ(n·log(n))_piaopiaolanghua的博客-CSDN博客_log(n!)

故时间复杂度为O(nlogn)

故整个堆排序 时间复杂度取大的O(nlogn)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值