数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)

简介: 数据结构堆排序中堆的建立、调整、插入、删除等操作的详解(题目讲解 简单易懂)

堆的定义

首先我们要明确堆是个什么东西,简而言之堆就是一个具有特殊性质的完全二叉树

完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树

堆的特殊性质体现在结点与子结点的大小关系上,当父结点的值大于等于其子节点的值时候就是大根堆,反之就是小根堆

堆的操作

在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆中定义以下几种操作:

最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点

创建最大堆(Build Max Heap):将堆中的所有数据重新排序

堆排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整的递归运算

下面我们主要以题目手工建堆以及进行插入删除等操作进行调整,这也是历年408常考的题型之一

堆的插入

插入操作比较简单,把插入关键字插入到堆的空叶子结点中,然后依据大根堆或者小根堆的性质进行结点之间的调整即可

题目:已知关键字序列5,8,12,19,28,20,15,22为小根堆,插入关键字3,调整好之后得到的小根堆是?

这种题目我们先画出原本的小根堆,注意这里结点序号的对应为父结点为i,则左孩子为2i,右孩子为2i+1

堆的删除

堆的删除稍微复杂一些,堆删除一般指取根结点,这样实际上删除了序列中的最大值/最小值,这时我们用堆中最后一个元素插入根结点,然后再依据大根堆或者小根堆的性质调整即可

题目:对关键字序列23,17,72,60,25,8,68,71,52进行最小堆排序,输出两个最小关键字之后的剩余堆是?

先建立堆,然后每次输出/删除之后用最后一个结点补上再调整即可

空堆建立

下面我们就以2021年408中真题进行讲解

题目:将关键字6,9,1,5,8,4,7依次插入到初始为空的大根堆H中,得到的H是什么?

做题方法:按上面插入的方法,依次插入到叶子结点,有不符合性质的马上调整即可

堆的调整

有了上面的基础之后,堆的调整就十分好理解,堆的调整是指一个原本的堆经过调整之后形成大根堆或者小根堆,注意根上面空堆的插入建立区别开

题目:将序列6,1,5,9,8,4,7建成大根堆时,正确的序列变化过程为?

解题方法:先写出初始堆,这时一般它是不满足大根堆或者小根堆的性质,然后从序列末尾进行调整即可,调整完一轮后再往下看有没有需要调整的,直到符合大根堆或者小根堆的性质即可

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
1月前
|
存储 算法 Java
散列表的数据结构以及对象在JVM堆中的存储过程
本文介绍了散列表的基本概念及其在JVM中的应用,详细讲解了散列表的结构、对象存储过程、Hashtable的扩容机制及与HashMap的区别。通过实例和图解,帮助读者理解散列表的工作原理和优化策略。
39 1
散列表的数据结构以及对象在JVM堆中的存储过程
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
72 16
|
2月前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
93 1
|
2月前
|
算法 搜索推荐
数据结构与算法学习十八:堆排序
这篇文章介绍了堆排序是一种通过构建堆数据结构来实现的高效排序算法,具有平均和最坏时间复杂度为O(nlogn)的特点。
75 0
数据结构与算法学习十八:堆排序
|
2月前
|
存储 算法 调度
数据结构--二叉树的顺序实现(堆实现)
数据结构--二叉树的顺序实现(堆实现)
|
2月前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆
|
2月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
20 0
|
2月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
36 0
|
2月前
|
存储 算法
【数据结构】二叉树——顺序结构——堆及其实现
【数据结构】二叉树——顺序结构——堆及其实现
|
2月前
【数据结构】大根堆和小根堆
【数据结构】大根堆和小根堆
47 0