堆的建成--无序序列开始

本文详细介绍了如何将一个无序的完全二叉树通过调整转化为小根堆。从只有一个节点的堆开始,到完全二叉树的叶子节点作为根的子树都是堆,再到从最后一个非叶子节点开始逐级调整。每个节点通过比较其左右孩子并进行必要的交换,确保父节点小于或等于其子节点,直至整个树成为小根堆。整个过程展示了堆的线性存储方式和调整策略,为理解堆排序等算法提供了清晰的思路。
摘要由CSDN通过智能技术生成

如果一个二叉树只有一个结点,那它就是堆了,没有左孩子和右孩子,他就直接是堆

完全二叉树中,所谓叶子结点为根,即左右孩子为空,这样的子树就已经是堆了,即所有的叶子结点都不需要调整了

从最后一个非叶子节点开始调整即可--在哪?怎么算?

根据性质:如果最后一个叶子结点为n,那他的双亲是n整除2,从他开始依次往前

如8是n/2-2

9是n/2-1

直到最后的根是1号位置的结点

堆其实也是一个线性表,用顺序存储法来存储--数组--研究那个算法都要知道怎么存

先按照它的序号1,2,3,4,5,6,7,8排在完全二叉树中,从上到下,从左到右

这就是初始的,无序的情况,我们先建一个初始的完全二叉树

位置和编号对应,

每一个叶子为根的子树都已经是堆了,都不用调整了,

从最后一个非叶子节点开始往前,4,3,2,1

数组中的元素也对应交换,对于这棵子树来说,他已经是小根堆了,

4号调整完后,到3号为根的子树了,从左右孩子里找一个小的和它交换

2号:n/2-2

左右孩子都比他大,那它就已经是一个小根堆了,不用调了

下一个:左右孩子里挑一个小的,同步的,实际上是在顺序表中交换

但是对于1号的子树还没有调整完,从根往下调整的元素必须调整到叶子才算完

49是3,那他的孩子是6和7,从这两个找小的交换,49就调整到叶子的地方了

最后整个无序的树变成小根堆了

看一下怎么实现:

 

从n/2一直到第一个结点,依次调整

爱雨天
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java代码-排序-Java
07-14
在Java中,我们可以利用数组来表示,并通过一系列的调整操作将无序序列转换成有序序列。以下是对排序算法及其在Java中的实现进行详细讲解。 1. 的概念 - 是一个近似完全二叉树的结构,同时满足的性质:...
python入门基础-数据类型&有序序列无序序列
热门推荐
milu_nff的博客
09-26 1万+
Python数据类型 • 分为两类: • 不可变数据(number,string, tuple)可变数据(list,dictionary,set) 最大的区别:不可变数据从定义下来不可以被改变,可变数据在定义完可以被改变; • 有序序列包括:列表,元组,字符串 (list,tuple,string) • 无序序列包括:字典,集合,控制集合数据的对象 (dictionary,set ) `有序,即有顺序的,能够索引取值的都是有序的` • 整数、小数都属于数字(number) • 整数(int)、小数
Python学习-----无序序列1.0(字典的创建、查看、添加、修改、删除/替换)
m0_73633088的博客
02-10 1413
详细讲解Python中无序序列的字典:包括建立、查询、修改、添加、删除等操作,非常非常详细
day10_无序序列(散列类型)
weixin_64630415的博客
05-25 869
day10_无序序列(散列类型) 文章目录day10_无序序列(散列类型)一、字典(dict)1.1 字典的创建1.2 字典的查询1.3 键值对的增加与修改1.4 键值对的删除二、集合(set)2.1 集合的创建2.2 集合的增删改2.3 集合的运算 可变【列表、集合、字典】:该类型的值进行修改后,内存地址不变。 不可变【数值类型、字符串、元组】:该类型的内存地址随着值的修改而修改。 一、字典(dict) 字典是键值对(key_value)的方式存在;两者是一种映射关系(一一对应)。 1.1 字
数据结构--无序的完全二叉树转为
祁东握力的博客
07-21 1920
无序的完全二叉树转为。 这里以转为最大为例: 首先要知道sift down下沉操作,才能理解怎么转为最大, 最大的下沉:下沉某个节点,即把该节点与它的两个子节点,共3个节点中值最大的结点选出来作为这三个节点中的父节点。并且,下沉后,被下沉的结点及其子节点还要进行下沉操作,直到不需要下沉为止,这是为了避免下沉后节点破坏了已经建立好的结构。 下沉操作举个例子: 如图: 上面这...
排序算法---之二叉树排序
朔月
01-21 618
是完全二叉树的结构,并且,节点都比子节点上的值大或者小。这就是对,由此可见,依次输出的最顶端元素,就能得到一个有序的序列,那么关键的问题就是如何把一个无序序列建成一个?输出最顶端元素后,如何把剩下的元素建成一个? 下面看看实现过程:
java代码-排序-----
07-16
1. **建**:将无序序列建成一个大顶(或小顶),此过程可以通过调整父节点和子节点的相对位置来完成。 2. **排序**:将顶元素(最大元素或最小元素)与最后一个元素交换,然后将剩余n-1个元素重新调整为...
挑战七大排序算法-04排序
01-07
将无需序列建成一个,根据升序降序需求选择大顶或小顶; b.将顶元素与末尾元素交换,将最大元素”沉”到数组末端; c.重新调整结构,使其满足定义,然后继续交换顶元素与当前末尾元素,反复执行调整+...
排序算法-排序
07-18
首先,我们需要将无序序列建成一个大顶或小顶。这可以通过从最后一个非叶子节点(也就是树的一半)开始,自下而上地对每个节点进行调整来完成。接着,我们将顶元素(即最大或最小元素)与末尾元素交换,...
C语言经典笔试题----话单排序
03-19
- 首先,将无序序列建成一个大顶(或者小顶)。这一步可以通过从最后一个非叶子节点(最后一个元素的父节点)开始,自底向上进行调整实现。对于每个节点,如果其值小于其子节点,就交换它们的位置,这样就能...
数据结构排序
huyunqiang111的博客
09-22 246
排序基本介绍 1)排序是利用这种数据结构而设计的一种排序算法排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 2)是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶 小顶示意图...
python序列结构(列表、字典、元组、集合)大总结(万字长文,建议收藏)
weixin_65049289的博客
06-30 5351
python序列结构(列表、字典、元组、集合)大总结(万字长文,建议收藏)
排序算法——排序
心皿月的博客
07-15 4566
目录 1️⃣概念回顾 二叉树 完全二叉树 大根 小根 2️⃣排序 基本介绍: 算法思想: 实例: 思路步骤: 代码实现: 算法性能分析: 排序是利用这种数据结构所设计的一种排序算法是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶。...
排序算法
weixin_43788095的博客
11-25 1169
排序算法
数据结构】什么是,如何使用无序数组生成一个
qq_65596720的博客
05-27 2422
(1)的概念及介绍,(2)如何使用无序数组生成一个(3)的基本功能实现(源代码分享)
python无序序列_Python笔记 【无序】 【二】
weixin_39802962的博客
11-26 514
序列list() ——把一个可迭代对象【可以是字符串,元组】转化为列表,可不带参数——生成空列表,或者带一个迭代器作为参数tuple() ——可迭代对象转化为元组str(obj) ——把obj对象转换为字符串,返回一个对象的string格式len(x) ——返回x的长度max() ——返回序列或参数集合中的最大值min() ——最小值 【max与min中的类型必须一样】代码:输出:sum(iter...
数据结构一一排序
xuanyin235的专栏
01-29 286
排序:一种树形选择排序,是对直接选择排序的有效改进。 综上描述,它的实现需要解决两个问题: 1、如何由一个无序序列建成一个? 2、如何在输出顶元素后,调整剩余元素成为一个新的无序序列建成一个的代码如下: /** * 初始进行调整 * 将L->iElem[0..length-1]建成 * 调整完之后第一个元素是序列的最小的元素 */ voi
排序
小麦大大博客
08-16 172
预备知识 是一种特殊的树形数据结构,即完全二叉树。分为大根和小根,大根为根节点的值大于两个子节点的值;小根为根节点的值小于两个子节点的值,同时根节点的两个子树也分别是一个 基本思路 步骤一:建立大根–将n个元素组成的无序序列构建一个大根, 步骤二:交换元素–交换尾元素和首元素,使尾元素为最大元素; 步骤三:重建大根–将前n-1个元素组成的无序序列调整为...
实现排序,函数void heapadjust(sqlist &l,int s,int m)为筛选法调整,函数void creatheap(sqlist &l)把无序序列l.r[1..n]建成大根,函数void heapsort(sqlist &l)对顺序表l进行排序。
最新发布
06-28
### 回答1: 排序是一种高效的排序算法,它利用这种数据结构来实现排序。在排序中,需要实现三个函数:heapadjust、creatheap和heapsort。 函数heapadjust是用筛选法调整的函数,它的作用是将以s为根节点的子树调整为大根。函数creatheap是将无序序列建成大根的函数,它的作用是将整个序列调整为大根。函数heapsort是排序的主函数,它的作用是将顺序表l进行排序。 在实现排序时,需要注意以下几点: 1. 是一种完全二叉树,可以用数组来表示。在数组中,根节点的下标为1,左子节点的下标为2*i,右子节点的下标为2*i+1。 2. 在排序中,需要将序列调整为大根。大根的定义是:每个节点的值都大于或等于其左右子节点的值。 3. 在排序中,需要将顶元素与底元素交换,并将的大小减1。然后再对顶元素进行调整,使其重新成为大根。 4. 在排序中,需要注意数组下标从1开始,而不是从开始。 下面是排序的代码实现: void heapadjust(sqlist &l,int s,int m) { int temp=l.r[s]; int j; for(j=2*s;j<=m;j*=2) { if(j<m && l.r[j]<l.r[j+1]) j++; if(temp>=l.r[j]) break; l.r[s]=l.r[j]; s=j; } l.r[s]=temp; } void creatheap(sqlist &l) { int i; for(i=l.length/2;i>;i--) heapadjust(l,i,l.length); } void heapsort(sqlist &l) { int i; creatheap(l); for(i=l.length;i>1;i--) { swap(l.r[1],l.r[i]); heapadjust(l,1,i-1); } } 其中,sqlist是顺序表的结构体,包含一个数组r和一个长度length。函数heapadjust的参数s表示要调整的子树的根节点下标,m表示的大小。函数creatheap和heapsort都是对顺序表l进行操作的函数。 ### 回答2: Heap Sort是一种常见的基于比较的排序算法,它通过使用数据结构进行排序。排序的原理是:将待排序序列转换成一个最大或最小,利用顶元素和底元素交换,即可得到从小到大或从大到小的有序序列和完全二叉树是等价的数据结构,因此可以使用数组来存储排序可以分为两个步骤:建和排序。其中,建可以通过调整函数来实现。 函数void heapadjust(sqlist L, int s , int m)的作用是将元素s到m中的无序序列调整成为一个大顶。具体实现方法为: 1. 令i=s,j=2i,将L[i]存入temp中。 2. 在L[i]的左右孩子中找到最大的元素,并将其下标赋值给j。 3. 如果父节点的值比左右孩子的值大,则退出循环,否则将L[j]放入L[i]中,令i=j,再将i的左右孩子中找到最大的元素下标赋值给j。 4. 将temp放入最终位置。 在代码实现中,需要注意以下几点: 1. 数组下标从1开始,因此需要将i和j都乘以2。 2. 需要在循环中使用while而非if。 3. 在循环中需要先判断右孩子是否存在。 建的方式可以分为两种,一种是从左到右逐个调用调整函数,另一种是从右到左逐个调用调整函数。第一种方式的时间复杂度是O(nlog n),第二种方式的时间复杂度是O(n)。因此,通常采用第二种方式。 排序的实现步骤如下: 1.建,将待排序序列转换成为最大。 2.排序,将顶元素和底元素交换,并调整。 3.重复步骤2,直到排序完成。 排序的时间复杂度为O(nlog n),空间复杂度为O(1)。其缺点是需要动态分配空间,所以不如快排稳定。但是,排序对于数据的随机性更加稳定,适合处理大规模数据。 ### 回答3: 排序是一种高效的排序算法,它通过构建二叉来实现排序。对于给定的一组数据,我们首先将它构建为一个完全二叉树,然后调整它的节点,使得父节点的值总是大于等于子节点的值(或小于等于子节点的值),进而得到一个大根(或小根)。再将顶元素(最大元素或最小元素)与底元素交换位置,然后调整剩余的节点,得到新的顶元素,并继续交换位置和调整,直到整个序列有序为止。 排序的核心函数是void heapadjust(sqlist *l, int s, int m),它实现了的调整过程。heapadjust函数将序列l中以s为根节点的子树调整为,其中m表示序列的长度。heapadjust函数分为两步: 1.将以s为根节点的子树调整为 先记录根节点的值,然后从它的左子节点和右子节点中找到较大(或较小)的一个,与它交换位置,并递归调整该子树,直到该子树调整为。如果根节点大于等于(或小于等于)两个子节点,则该子树已经调整为,停止递归。 2.将整个序列调整为 从最后一个非叶子节点开始,向前依次调用heapadjust函数,将序列调整为。 最后,排序的主函数是void heapsort(sqlist *l),它将序列l通过排序的方式排序,具体实现过程如下: 1.将序列构建为 从最后一个非叶子节点开始,向前依次调用heapadjust函数,将序列调整为。 2.将顶元素与底元素交换 将顶元素(最大元素或最小元素)与底元素交换位置。 3.调整剩余的节点 对底元素上方的节点进行heapadjust调整,得到新的顶元素,并继续交换位置和调整,直到整个序列有序为止。 排序具有时间复杂度为O(nlogn),并且具有原地排序的特点,不需要额外的空间,因此被广泛应用于数据处理和计算机算法中。
写文章

热门文章

  • struct Lnode *next 17934
  • 二叉树的层次遍历算法 15435
  • 尾插法建立单链表 11657
  • 有向图和有权图的邻接矩阵表示法 11146
  • 无向图的邻接矩阵(数组表示法) 10461

分类专栏

  • C语言 41篇
  • css 31篇
  • java 39篇
  • html 2篇

最新评论

  • 数值分析中,为什么3.1415有效数字为4位

    sunshine2022要加油: 所以应该是4位对吧

  • 数值分析中,为什么3.1415有效数字为4位

    flash9z: 本来就疑惑,看了你写的更疑惑了

  • 数值分析中,为什么3.1415有效数字为4位

    德德德嘞: 小于0.5*10-3

  • 数值分析中,为什么3.1415有效数字为4位

    九蚊纸: 你写错了

  • 分段函数求导

    2301_81138134: 👍👍👍

最新文章

  • 第一次使用github经验
  • 解决matplotlib画图module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘的问题
  • IDEA如何快速引入局部变量
2024年1篇
2023年42篇
2022年191篇
2021年284篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家水果玻璃钢雕塑订做价格黑龙江广场玻璃钢雕塑成都商场美陈玻璃钢卡通雕塑玻璃钢雕塑蘑菇凉亭玻璃钢雕塑怎么邮寄玻璃钢雕塑厂哪里好浙江节庆商场美陈销售公司玻璃钢雕塑倒茶仿真菜篮子玻璃钢景观雕塑大理市玻璃钢雕塑价格表平凉动物玻璃钢雕塑定做上海玻璃钢花盆有哪些马鞍山学校玻璃钢雕塑设计铸铝和玻璃钢哪个雕塑好通辽景区玻璃钢雕塑价格合肥抽象玻璃钢雕塑玻璃钢古代人物雕塑设计湖北佛像校园玻璃钢景观雕塑公司常熟秋季商场美陈江汉商场美陈品牌企业天门玻璃钢雕塑加工玻璃钢经典动画雕塑杭州玻璃钢雕塑摆件哪家好中牟玻璃钢雕塑价格仙林新年商场美陈园林玻璃钢卡通雕塑源头好货成都周年庆典商场美陈广场校园玻璃钢雕塑制作郑州环保玻璃钢雕塑生产厂家大型玻璃钢雕塑图片欣赏香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化