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

堆(Heap)

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

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

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

建立大根堆

i的左孩子:2i

i的右孩子:2i+1

i的父结点:i/2

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

先处理编号最大的根

接下来处理3号结点

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

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

建立大根堆(代码)

基于大根堆进行排序

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

第一趟

第二趟

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

大根堆:递增序列

小根堆:递减序列

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

算法效率分析

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

下坠的时间复杂度:

稳定性

总结:

练习:

相关推荐
蜡笔小马1 分钟前
8.Packing 算法
数据结构·b树
划破黑暗的第一缕曙光3 分钟前
[数据结构]:4.二叉树_堆
c语言·数据结构·二叉树·
浅念-12 分钟前
C语言——双向链表
c语言·数据结构·c++·笔记·学习·算法·链表
轩情吖13 分钟前
数据结构-图
数据结构·c++·邻接表·邻接矩阵·最小生成树·kruskal算法·prim算法
Prince-Peng35 分钟前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
码农水水1 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
-Try hard-2 小时前
数据结构:链表常见的操作方法!!
数据结构·算法·链表·vim
wengqidaifeng2 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
嵌入小生0072 小时前
单向链表的常用操作方法---嵌入式入门---Linux
linux·开发语言·数据结构·算法·链表·嵌入式
千谦阙听2 小时前
数据结构入门:栈与队列
数据结构·学习·visual studio