目的: 当向堆中插入新元素时,为了维护堆的性质,需要对该元素进行向上调整。向上调整法就是从新插入的节点开始,通过与其父节点的比较和交换,确保该节点的值不大于(对于大根堆)或不小于(对于小根堆)其父节点的值。 步骤: 插入数据 与自己的父亲比较 交换/不交换 交换:孩子来到父亲位置,父亲来到自己父亲的位置。
2.堆向上调整 这个主要是我们的建堆的过程,就是我们进行建堆的时候,这个数据从我们的叶子结点开始需要进行这个向上调整的过程; 我们从上面的这个建堆的过程是可以看到的,他是需要和自己的这个父亲节点不断地进行比较,直到他的数值比父亲节点的数值小,这个大堆才完成; 我们的建堆主要是在下面的这个插入数据的过程...
voidHPPop(HP*php);//出堆数据HPDataTypeHPTop(HP*php);// 判空boolHPEmpty(HP*php);//交换voidswap(int*x,int*y);//向下调整算法voidAdjustDown(HPDataType*arr,intparent,intn);//向上调整算法voidAdjustUp(HPDataType*arr,intchild);堆的初始化C++复制代码9123456voidHPInit(HP*php){assert...
一、向上调整来建堆 思想: 首先,我们把第一个数字看成堆,也就是4,当第二个数字插入进去的时候,进行向上调整算法,使其确保为小堆,向上调整的算法在上篇博文已详细讲解过,不过多赘述。一个一个的插入数据的过程就是遍历数组,确保数组里每一个数进行向上调整算法 其过程的图解如下 代码实现 public class Test2 {...
创建堆的思路可以通过向上调整,也可通过向下调整。这里讲通过向上调整建立堆。 由于我的AdjustUp函数是用来调整小堆的,所以,这里创建的也是小堆。 1.思路: 传入参数 a:数组,n:是数组元素个数 1.为p->a开辟n个空间; 2.利用memcpy函数,把数组a复制到p->a中 ...
堆 一、堆的概念及结构 二、向上调整算法⭐⭐ 1、算法思路分析【孙子的谋权篡位之旅👑】 2、代码详情解说 三、向下调整算法⭐⭐⭐⭐⭐ 1、算法图解分析【高处不胜寒🆒趁早做打算】 2、代码考究精析 四、堆的数据结构各接口算法实现
向上调整算法的作用就是通过从下到上的算法排序,将任意一个堆变成最小堆或者最大堆。 注意:此处向上调整算法为从下到上,所以执行时需要传入参数来确定具体从哪一个结点开始排序;不同于向下调整算法总是从根节点开始排序。 步骤: 1、确定待排序结点 2、与父结点进行比较,满足条件则交换 3、更新结点位置,继续执行...
//堆的向下调整(小堆) voidAdjustDown(int*a,intn,intparent) { //child记录左右孩子中值较小的孩子的下标 intchild=2*parent+1;//先默认其左孩子的值较小 while(child<n) { if(child+1<n&&a[child+1]<a[child])//右孩子存在并且右孩子比左孩子还小 ...
向上调整是由空堆,逐个插入元素,来建立初始堆,向下调整是从n/2的位置,倒着将编号n/2,n/2-1,...,1直到编号为1的结点调成堆后,初始堆构建完成。它们没有多大的区别,只不过初始堆有些元素所在的位置不同而已。建
(小)堆的性质 对堆的理解 3.3 实现堆 3.3.1 向下调整算法(AdjustDown) 核心思想 小小结 3.3.2 向上调整算法(AdjustUp) 核心思想 小小结 3.3.3 小结 3.3.4 堆的插入(HeapPush) 3.3.5 堆的删除(HeapPop) 3.3.6 堆的实现「剩余代码」 3.3.7 建堆的时间复杂度 ...