数据结构(8.4_2)——堆排序

堆(Heap)

大根堆:完全二叉树中,根>=左、右

小根堆:完全二叉树中,根<=左、右

相关知识------二叉树的顺序存储

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

思路:把所有的非终端结点都检查一遍,是否满足大堆根的要求,如果不满足,则进行调整

先处理编号最大的根

接下来处理3号结点

接下来依次处理剩下的根结点

处理完53结点后需要将更下的元素"下坠"

建立大根堆(代码)

基于大根堆进行排序

每一趟将堆定元素加入有序子序列(与待排序序列中的最后一个元素交换),交换完后调整排序序列,再次构成一个大根堆

第一趟

第二趟

.....n-1次排序后

大根堆:递增序列

小根堆:递减序列

基于大根堆进行排序 (代码)

算法效率分析

建堆的时间复杂度:O(n)

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
SHOJYS5 分钟前
思维难度较大 贪心优化背包 [USACO22DEC] Bribing Friends G
数据结构·算法·深度优先
啊董dong6 分钟前
课后作业-2025年12月07号作业
数据结构·c++·算法·深度优先·noi
Octhexis1 小时前
LC106 从中序与后序遍历序列构造二叉树
数据结构
爱装代码的小瓶子1 小时前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表
Felven2 小时前
C. Isamatdin and His Magic Wand!
c语言·数据结构·算法
Ayanami_Reii2 小时前
进阶数据结构应用-单词
数据结构·字符串·ac自动机
啦哈拉哈2 小时前
【Python】知识点零碎学习1
数据结构·python·算法
Han.miracle2 小时前
算法--003快乐数
数据结构·算法·快乐数
永远都不秃头的程序员(互关)2 小时前
查找算法深入分析与实践:从线性查找到二分查找
数据结构·c++·算法
良木生香3 小时前
【数据结构-初阶】详解线性表(1)---顺序表
数据结构