算法解析
要明白向下调整算法首先要掌握数据结构中堆的定义(不是内存中的堆)。
1·概念:堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。
2·堆的分类:最大堆:每个父节点的值都大于孩子节点。最小堆:每个父节点的值都小于孩子节点
向下调整算法的作用就是通过从上到下的算法排序,将任意一个堆变成最小堆或者最大堆。
步骤:(此处以最小堆为例)
1、从根节点的左右孩子中选取一个较小值min
2、当前需要调整的数据与较小值min进行比较①、大于min:和min进行交换,从交换后的位置继续执行第1步;
②、小于等于min:结束
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//向下调整算法---以最小堆为例
void Shift_down(int *arr, int n, int curpos) //n-数组大小 curpos-需要调整的位置
<