堆排序分为两个过程,一个建堆的过程,一个是从堆顶取数的过程。这里针对第一个过程,给出在堆的形式是完全满二叉树的情况下,建堆复杂度Ο(n)的简单推导。

  

  上图是一个完全满二叉树,假设一个完全满二叉树的节点数为n,树高为h(共h层),则满足h = log(n + 1)。由堆的构建过程可以知道,第一层(从下往上)进行的比较次数为0次,第二层为1次,。。。,第h层(最上一层)为h - 1次,而每一层对应的节点数分别为2^h, 2^(h - 1), ..., 2^0个,所以总计的比较次数为

  T(n) = 0 * 2^h + 1 * 2^(h - 1) + 2 * 2^(h - 2) + ... + (h - 1) * 2^0                                                                                                 式(1)

2T(n) = 1 * 2^h + 2 * 2^(h - 1) + 3 * 2^(h - 2)... + (h - 1) * 2^1                                                                                                   式(2)

式(2)减式(1)得

T(n) = 2^h + 2^(h - 1) + 2^(h - 2)... + 2^1 - (h - 1)                                                                                                              式(3)

所以

                   T(n) = 2^(h + 1) - h - 1 = 2n - log(n + 1) + 1 = O(n)

推到错误,纯属正常。

转载于:https://www.cnblogs.com/liujinyao/p/4708306.html

堆排序建堆复杂度在特殊情况下的推导相关推荐

  1. 【图论】已知度数列情况下的简单无向图的判断方法

    感谢评论区大佬@goodloveyourlove补充的判断度数列是否能构成无向树的方法与例子. 关于度数列是否能构成无向树的判断方法可以移步至评论区. ======================== ...

  2. 再写堆(堆的性质,向下调整,建堆,堆的插入删除初始化,堆排序,TopK问题)

    堆的概念 如果有一个关键码的集合K={k0,k1,k2,-,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储再一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+1(Ki ...

  3. 堆排序:体会线性建堆法的威力

    堆排序:体会线性建堆法的威力 假设现在有一个水平面,上面有 8 只蚂蚁排成一排,我把这张示意图放在了文稿中.方便起见,我们给所有的蚂蚁从左到右依次编号,编号为 1 到 8.从 0 秒开始,红色蚂蚁向左 ...

  4. 建堆 java_堆排序就这么简单

    一.堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完 ...

  5. 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为

    初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:() 8 3 2 5 1 6 4 7 3 2 8 5 1 4 6 7 3 8 2 5 ...

  6. 堆,建堆,堆排序,堆删除和堆插入

    注意:看这篇文章之前,你一定要知道完全二叉树的结构 首先要明白一点,堆是一种数据结构,和队列,链表,树等等一个级别. 堆的定义 堆是一棵节点含有内部比较器的完全二叉树.(说白了,堆就是完全二叉树,只不 ...

  7. 算法练习day5——190322(快排、建堆、调整堆)

    1.快速排序 1.1 非经典: 每次选取数组的最后一个元素为基准,进行排序: 将大于基准的排后边,小于基准的排前面,等于基准的在中间(类似于荷兰国旗问题): 直至进行排序的左边界=右边界. packa ...

  8. 数据结构:堆的实现与建堆时间复杂度分析

    目录 前言 一.堆的介绍 1.堆的本质 2.堆的分类 二.堆的实现(以小根堆为例) 1.关于二叉树的两组重要结论: 2.堆的物理存储结构框架(动态数组的简单构建) 3. 堆元素插入接口(以小根堆为例) ...

  9. 堆排序小根堆 大根堆 迭代 递归 总结 完整代码

    http://blog.csdn.net/morewindows/article/details/6709644/ 1.堆基础 堆:完全二叉树或者是近似完全二叉树  大根堆:每个结点的值都大于或等于其 ...

最新文章

  1. 裸辞后,从Android转战Web前端的学习以及求职之路
  2. SpringMVC接收checkbox传值
  3. 元素隐藏的三种方式对比(针对移动端项目中的按钮,先隐藏且不能被点击 visibility:hidden)
  4. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建
  5. apache.camel_Apache Camel 2.18 –即将推出的功能的亮点
  6. 前端学习(2056):初识vue.js
  7. 易宝典——玩转O365中的EXO服务 之四十二 导出就地电子数据展示搜索结果
  8. 强制将IE8设置为IE7兼容模式来解析网页
  9. 中小型公司***的配置及NAT应用案例
  10. jms 教程_JMS教程–什么是JMS
  11. String类基础的那些事!
  12. Office LTSC 2021 for Mac
  13. DotNetTextBox控件添加外挂插件功能的图文教程。
  14. 基于JSP小型超市管理系统
  15. windows10 易升 下载失败 解决方法
  16. 2021-05-18 C#.NET面试题 一张长方形的桌面上放n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与
  17. java swing 有哪些_一个经典的java swing gui设计(几乎包含所有常用的控件及布局)
  18. hadoop 报错 there appears to be a gap in the edit log. we expected txitd 1, but got txid 14444
  19. STM32MP157A-DK1 烧写系统
  20. 微型计算机接口与技术期末,北邮《微机原理与接口技术》期末复习题(含答案).doc...

热门文章

  1. 用memoization优化递归算法[JS/PHP实现]
  2. 基于报文大小的策略路由
  3. ubuntu安装ssh无法连接解决日志(已解决,可连接)-转
  4. 【解释】while(~scanf(%d, n))的~的含义~scanf
  5. linux下启动Oracle服务和监听程序
  6. css中em单位和rem单位
  7. linux内核分析--异步io(二)
  8. 6位大师浅谈未来三年大数据的发展
  9. zw版【转发·台湾nvp系列Delphi例程】HALCON HistoToThresh1
  10. php数组的 需要注意的