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

堆(Heap)

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

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

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

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

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

先处理编号最大的根

接下来处理3号结点

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

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

建立大根堆(代码)

基于大根堆进行排序

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

第一趟

第二趟

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

大根堆:递增序列

小根堆:递减序列

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

算法效率分析

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

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
pluviophile_s3 小时前
数据结构:第2讲:线性表
数据结构·笔记
Love_云宝儿6 小时前
WKT数据示例并与GeoJSON数据对比
数据结构·gis
风筝在晴天搁浅7 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
牢姐与蒯7 小时前
c++数据结构之c++11(一)
数据结构·c++
iiiiyu8 小时前
IO流(二)
java·开发语言·数据结构·编程语言
啦啦啦啦啦zzzz8 小时前
数据结构:平衡二叉树
数据结构·c++·二叉树
Ameilide11 小时前
数据结构 树 二叉树
数据结构
WWW652611 小时前
代码随想录 打卡第四十七天
数据结构·算法·leetcode
cpp_250111 小时前
P10722 [GESP202406 六级] 二叉树
数据结构·c++·算法·题解·洛谷·树形结构·gesp六级
c2385612 小时前
map和set
数据结构·c++