博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序建堆的时间复杂度
阅读量:4113 次
发布时间:2019-05-25

本文共 456 字,大约阅读时间需要 1 分钟。

建堆的过程,看起来外面一层循环O(n),里面是个logn的调整函数,时间复杂度貌似是nlogn的,但是仔细分析,其实质是O(n)的。

证明如下:

首先,对于高度为h的完全二叉树,其第i层的元素个数为2^(i-1),对于堆的每一层,调整的深度都不一样,每层的元素的调整深度小于等于h-i,假设每层调整的深度是h-i,欲构建的堆是个完全二叉树,那么对于每层来说:

最后一层不用调整;

倒数第二层的消耗是:2^(h-1)*1;

倒数第三层的消耗是:2^(h-2)*2;

。。。。。。

第一层的消耗是:2^(h-h)*(h-1);

加起来总消耗是:S=2^(h-1)*1+2^(h-2)*2+。。。+h;

2S=2^h*1+2^(h-1)*2+。。。+2*h;

S=2^h+2^(h-1)+2^(h-2)+。。。+2^1-h;

S=2^h+2^(h-1)+2^(h-2)+。。。+2^1+2^0-h-1;

S=2^(h+1)-2-h;

h=logn;

代入得:S=2*n-2-logn;

故堆排序的建堆过程是O(n)的。

转载地址:http://ylgsi.baihongyu.com/

你可能感兴趣的文章
有return的情况下try catch finally的执行顺序(最有说服力的总结)
查看>>
String s1 = new String("abc"); String s2 = ("abc");
查看>>
JAVA数据类型
查看>>
Xshell 4 入门
查看>>
SoapUI-入门
查看>>
Oracle -常用命令
查看>>
JAVA技术简称
查看>>
ORACLE模糊查询优化浅谈
查看>>
2016——个人年度总结
查看>>
2017——新的开始,加油!
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.1、类和实例
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.4、获取对象信息
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
Linux设备模型(总线、设备、驱动程序和类)之四:class_register
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>