数据结构之---堆(2)

一、出堆

出堆是指将堆顶数据出堆。出堆完成后要保证剩余数据还是满足原来堆的性质。所以我们把堆顶数据和堆底最后一个数据交换,取出新堆底数据,之后通过向下调整算法将剩下的数据重新排列成一个堆。

大堆经过出堆操作得出的数据是升序的

小堆经过出堆操作得出的数据是降序的

二、建堆

向上调整建堆

将新数据插入堆底,然后向上调整直到满足堆的结构

向下调整建堆

要向下调整,就要确保该数据下面的数据已经是一个堆了。我们从堆底数据开始排,比较堆底数据和它父节点的数据。一轮完成后下面几层都是堆的顺序了。调整完成后得到新的父子节点,在继续将新的父节点向下调整。

节点越多的层越靠后

向下调整算法节点多的层调整的次数少

向上调整算法节点多的层调整的次数还多,所以在时间复杂度上向下调整算法是优于向上调整算法的。

相关推荐
渡过晚枫6 分钟前
[第十四届蓝桥杯/java/算法]国赛A——跑步计划
算法
hanlin039 分钟前
刷题笔记:力扣第17题-电话号码的字母组合
笔记·算法·leetcode
不是株20 分钟前
算 法
数据结构·python·算法
云泽80821 分钟前
蓝桥杯算法精讲:从宏观角度重新认识递归
算法·职场和发展·蓝桥杯
自信1504130575922 分钟前
插入排序算法
c语言·数据结构·算法·排序算法
阿Y加油吧27 分钟前
力扣打卡day09——缺失的第一个正数、矩阵置零
数据结构·算法·leetcode
2301_8184190127 分钟前
C++中的状态模式实战
开发语言·c++·算法
仰泳的熊猫27 分钟前
题目2576:蓝桥杯2020年第十一届省赛真题-解码
数据结构·c++·算法·蓝桥杯
CSDN_kada30 分钟前
杭电网安复试编程Day23
c++·考研·算法
灰色小旋风34 分钟前
力扣16 最接近的三数之和(C++)
数据结构·c++·算法·leetcode