搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家自动化
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
L2/L2+级ADAS市场爆发,国产芯片厂商迎来了关键时刻_l2+芯片份额
2
Flink菜鸟教程(一)——从入门到开发
3
【MySQL】索引(上)
4
智能算法挑战赛小学组全年级——模拟考试_全国青少年信息素养大赛智能算法应用挑战赛初赛试题
5
2020同济大学电子与信息工程学院计算机系夏令营机试题目_在 m 行*n 列的矩阵方格中随机摆放 k 架飞机,互相不得重叠、交叉
6
远程桌面连接失败:出现身份验证失败,无法连接到本地安全机构_发生验证错误无法连接到本地安全机构
7
字符的点阵显示(模拟户外广告显示屏)
8
阿里云CentOS 7.5 使用Nginx配置多个域名及转发_centos7.5 代理转发请求到另一个域名
9
FreeRTOS移植到stm32_freertos移植stm32
10
【hadoop】使用Java API 上传下载数据_api上传下载
当前位置:
article
> 正文
堆排序的时间复杂度_堆排序的时间复杂度分析
作者:我家自动化 | 2024-06-18 07:40:34
赞
踩
堆排序的时间复杂度分析
阅读本文需先知晓堆的定义与堆排序的实现
堆排序的步骤分两步
首先把序列变成一个有序堆
再不断交换堆顶的最大元素和堆底元素,每次交换都像是选择排序般取走了剩余序列中的最大值
所以我们可以分两个步骤计算堆排序的
时间复杂度
有序堆的构造:等价于对非
叶子节点
从下至上的下沉操作
假设堆高h为一整数,堆有n个节点,那么h = log
2
n
该堆有2
h
个叶子节点,由于叶子节点是最底层,所以无需下沉
倒数第二层的节点有2
h-1
个,该层节点下沉到叶子节点至多需要比较2次(兄弟节点的比较,父节点与较大的兄弟节点的比较),交换1次(如果父节点小于子节点则交换)
倒数第三层有2
h-2
个非叶子节点,他们下沉到倒数第二层之后还要继续下沉到叶子节点(倒数第三层的节点可能比叶子节点还小,所以还要下沉到叶子节点),所以对倒数第二层的节点其下沉至多需要比较4次,交换2次。
以此类推,倒数第n层的下沉所需操作数 = 该层节点数 * 该层节点下沉所需的操作数 ,前者为2
h-n+1
,后者为3(n-1)。
所以根节点作为倒数第h+1层,它的下沉所需操作数就为2
h-(h+1)+1
* 3 (h+1-1) = 2
0
* 3h。
将各层的下沉所需操作数从上至下相加,就是构造整个有序堆的所需操作数:3 ( 2
0
h + 2
1
(h-1) + 2
2
(h-2) +…2
h-1
),设该式为a,则2a - a = 3 ( 2
1
+ 2
2
+…2
h
- h ),根据等比序列的求和公式,我们可以知道a = 3 ( 2
h+1
- 2 - h),代入h,得a = 3(2n - 2 - log
2
n
) ≈ 6n。
综上,建有序堆的时间复杂度是O(n)。
不断交换堆顶元素和堆底元素
共进行n-1次交换,所需操作数为n-1
并且每次交换都会导致根节点不再是堆中的最大元素,所以需要对新的根节点进行下沉操作,所需操作数为3(n-1)h,即3(n-1)log
2
n
综上,该过程所需操作数为n-1 + 3(n-1)log
2
n
= (n-1)(3log
2
n
+ 1),时间复杂度即为O(nlog
n
)
将O(nlog
n
),O(n)两个时间复杂度相加,就是堆排序的时间复杂度O(nlog
n
)
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家自动化/article/detail/734233
推荐阅读
article
带你了解
建堆
的
时间
复杂度
_
建堆
时间
复杂度
...
学习数据机构堆过程
的
必经之路,面试
的
时候可能会被问到堆
时间
复杂度
的
证明过程,博主建议最好背下来_
建堆
时间
复杂度
建堆
时间
复...
赞
踩
article
四相五线
步进
电机
_五线四相...
步进
电机
的认识
步进
电机
是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一...
赞
踩
article
VS
Code
Json
格式化
插件-
JSON
formatter_
vscode
json
格式化
插件...
vscode
json
格式化
插件_
vscode
json
格式化
插件
vscode
json
格式化
插件 ...
赞
踩
article
国内
免费
使用
ChatGPT
3.5、
4.0
,亲测可用,附
ChatGPT
提示词_
免费
chatgpt3.5...
它
使用
机器学习技术,特别是自然语言处理(NLP),可以理解和生成人类语言。它的目标是理解和生成语言,就像人类一样。这些都...
赞
踩
article
javaWeb
学生
信息管理系统
2_
javawab
学生
信息管理系统
...
一款基于纯Servlet技术开发的
学生
信息管理系统
(SIMS),在设计中没有采用SpringMVC和Spring Boo...
赞
踩
article
[
Python
从零到壹] 五十九.
图像
增强及运算篇之
图像
锐化
Scharr
、
Canny
、
LOG
实现边缘...
欢迎大家来到“
Python
从零到壹”,在这里我将分享约200篇
Python
系列文章,带大家一起去学习和玩耍。第二部分将讲...
赞
踩
article
Python
3 与
MySQL
的
集成:
使用
mysql
-
connector
...
在当今
的
数据驱动世界中,数据库是任何应用程序
的
核心组件之一。
MySQL
作为最流行
的
开源关系数据库管理系统之一,被广泛用...
赞
踩
article
【
MySQL
】
函数
...
比如密码在数据库绝对不能是明文保存的。万一表结构泄漏了,用户信息就全部被泄漏了。这里有一个细节mysql对于sql里面涉...
赞
踩
article
【
React
入门实践
,
2024年最新斗鱼直播
前端开发
二面被刷_斗鱼
是
用
react
开发
的
吗...
操作
的
显示:isFreeze控制显示
是
‘冻结’还
是
‘解冻’
,
并对应changeFreeze(value.id)函数实现功...
赞
踩
article
苹果
紧急
修复
已遭
利用
的
3
个
0day
漏洞
...
聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士
苹果
紧急
修复
了已用于攻击 iPhone 和 Mac 用户的三个新0da...
赞
踩
article
利用
py
thon库
movie
py
,快速
剪辑
视频
_
py
利用
movie
py
视频
尺寸裁剪...
安装
movie
py
pip install
movie
py
剪辑
代码from
movie
py
.editor import *...
赞
踩
article
解决
gi
t
clone
报错: Failed
t
o
connec
t
t
o
gi
t
hub.com por...
不能
gi
t
clone
来自Gi
t
hub上的仓库,报端口443错误。_
gi
t
clone
couldn
'
t
connec
t
...
赞
踩
article
微信
小
程序
02: 使用
微信
快速验证组件
code
获取
手机号
_
微信
小
程序
获取
手机号
...
上文为核心文章请先复制上文的代码后再复制此篇代码里面是对
微信
小
程序
大部分操作的总结与封装上文为核心文章, 请先复制上文的...
赞
踩
article
软件测试
|
使用
Python
轻松
裁剪
视频
_
python
快速剪切
视频
...
裁剪
视频
是在
视频
编辑和处理中常见的任务之一,
Python
提供了多种库和工具,可以用来
裁剪
视频
。在本文中,我们将详细讨论如...
赞
踩
article
5大
趋势
!牛客
CEO
叶向宇深度解读《
2023
春季
校园
招聘
白皮书
》_一图读懂
校园
招聘
数据
...
这种变化反映出,学生们在求职时,已经不再只看重企业的规模,而是更加注重企业的发展前景和自身的发展机会。而京东的管培生项目...
赞
踩
article
Python
SQLite3
安装
OpenVP
* Web管理后台...
一、
安装
相关yum install gcc gcc-c++ openssl openssl-devel pam-deve...
赞
踩
article
论
第一次
使用
安卓
studio
并导入
项目
却
出错
差点死去...
安卓
studio
有两个重要看设置的地方,一个是file里面的project structure 一个是setting,这...
赞
踩
article
实习
第一天
,如何使用
git
拉取
公司
代码
_
git
怎么
登录
拉取
公司
仓库
代码
...
刚来到
公司
,leader会提供项目地址,一般保存在
git
ee、
git
hub上。有了地址我们就可以开始着手研究
代码
了。(我...
赞
踩
article
【
Java
】导入
别人
的
项目
至
开发软件
中后,无法使用和运行,而且还会产生
报错
的
解决办法
_
java
复制别...
概述我们在学习编程过程中,或者工作过程中,经常需要查阅
别人
的
项目
代码,学习和借鉴
别人
的
代码等等,总会遇到导入
别人
代码之后...
赞
踩
article
Node
.
js
使用
mongodb
.
js
操作
MongoDB
数据库...
这里给出async/await 操作方式,写起来会舒服很多。文档给出的示例是通过回调函数操作的。_
mongodb
.
js
m...
赞
踩
相关标签
数据结构
学习方法
程序人生
面试
json
vscode
格式化
chatgpt
人工智能
gpt
javaWeb
python
计算机视觉
opencv
图像锐化
Canny
开发语言
mysql
android
adb
数据库
react.js
前端
前端框架