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

堆(Heap)

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

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

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

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

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

先处理编号最大的根

接下来处理3号结点

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

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

建立大根堆(代码)

基于大根堆进行排序

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

第一趟

第二趟

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

大根堆:递增序列

小根堆:递减序列

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

算法效率分析

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

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
小娄~~3 小时前
C语言卷子错题集
c语言·开发语言·数据结构
过期动态5 小时前
【LeetCode 热题 100】盛最多水的容器
java·数据结构·spring boot·算法·leetcode·spring cloud·职场和发展
05候补工程师6 小时前
【408考研·数据结构专题】二叉树、树与森林、线索树及哈夫曼树核心考点与秒杀技巧深度总结
数据结构·经验分享·笔记·考研·算法
Dlrb12117 小时前
数据结构-队列,循环队列,哈希表
数据结构·哈希表·队列·循环队列·哈希存储
2401_868534788 小时前
数据结构简答题100问
数据结构
代码中介商9 小时前
B树:数据库索引的高效基石
数据结构·数据库
小糯米60110 小时前
C语言 自定义类型:结构体 与 联合体
c语言·开发语言·数据结构
chengO_o10 小时前
AVL树详解与实现(C++)
数据结构·c++·avl树·平衡二叉搜索树
玉树临风ives10 小时前
atcoder ABC 458 题解
数据结构·c++·算法
AKA__Zas10 小时前
芝士算法 (双指针篇2.0)
java·数据结构·leetcode·学习方法