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

堆(Heap)

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

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

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

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

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

先处理编号最大的根

接下来处理3号结点

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

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

建立大根堆(代码)

基于大根堆进行排序

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

第一趟

第二趟

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

大根堆:递增序列

小根堆:递减序列

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

算法效率分析

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

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
Univin4 小时前
C++(10.4)
开发语言·数据结构·c++
Jayden_Ruan10 小时前
C++十进制转二进制
数据结构·c++·算法
Haooog11 小时前
98.验证二叉搜索树(二叉树算法题)
java·数据结构·算法·leetcode·二叉树
lixinnnn.13 小时前
贪心:火烧赤壁
数据结构·c++·算法
前端 贾公子13 小时前
《Vuejs设计与实现》第 5 章(非原始值响应式方案)下 Set 和 Map 的响应式代理
数据结构·算法
快乐是一切14 小时前
PDF底层格式之水印解析与去除机制分析
前端·数据结构
MHJ_14 小时前
Multi-Metric Integration(多指标集成)
数据结构
小马学嵌入式~15 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
_给我学起来16 小时前
数据结构:树
数据结构
LGL6030A20 小时前
数据结构学习(2)——多功能链表的实现(C语言)
数据结构·学习·链表