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

堆(Heap)

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

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

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

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

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

先处理编号最大的根

接下来处理3号结点

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

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

建立大根堆(代码)

基于大根堆进行排序

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

第一趟

第二趟

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

大根堆:递增序列

小根堆:递减序列

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

算法效率分析

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

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
wengqidaifeng40 分钟前
数据结构与算法经典OJ题目详解(C语言):从数组到链表的进阶之路(上)
c语言·数据结构·链表
blackicexs1 小时前
第六周第一天
数据结构·算法
We་ct2 小时前
LeetCode 236. 二叉树的最近公共祖先:两种解法详解(递归+迭代)
前端·数据结构·算法·leetcode·typescript
历程里程碑3 小时前
普通数组---合并区间
java·大数据·数据结构·算法·leetcode·elasticsearch·搜索引擎
无忧.芙桃3 小时前
AVL树的实现
数据结构·c++
踢足球09294 小时前
寒假打卡:2026-2-23
数据结构·算法
骇城迷影5 小时前
代码随想录:二叉树篇(中)
数据结构·c++·算法·leetcode
Zhu_S W5 小时前
深入理解哈希表:原理、源码与设计哲学
数据结构·散列表
今儿敲了吗5 小时前
28| A-B数对
数据结构·c++·笔记·学习·算法
List<String> error_P6 小时前
DFS(深度优先搜索)
数据结构·算法·dfs