Análisis de algoritmos
Para comprender el algoritmo de ajuste descendente, primero debemos comprender la definición del montón en la estructura de datos (no el montón en la memoria).
1. Concepto: La estructura de datos del montón es un objeto de matriz, que puede considerarse como una estructura de árbol binaria completa.
2. Clasificación del montón: montón máximo: el valor de cada nodo padre es mayor que el del nodo hijo. Montón mínimo: el valor de cada nodo principal es menor que el del nodo secundario
La función del algoritmo de ajuste descendente es convertir cualquier montón en el montón más pequeño o en el montón más grande clasificando el algoritmo de arriba hacia abajo.
Pasos: (Tome el montón mínimo como ejemplo)
1. Elija un valor mínimo mínimo de los hijos izquierdo y derecho del nodo raíz
2. Compare los datos actuales que deben ajustarse con el valor mínimo mínimo①, mayor que min: intercambiar con min, continuar ejecutando el paso 1 desde la posición después del intercambio;
②, menor o igual que min: fin
Código
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//向下调整算法---以最小堆为例
void Shift_down(int *arr, int n, int curpos) //n-数组大小 curpos-需要调整的位置
{
//左孩子
int child = 2 * curpos + 1;
while (child < n)
{
if (child + 1 < n&&arr[child + 1] < arr[child])
child++;
//向下比较
if (arr[child] < arr[curpos])
{
int tmp = arr[child];
arr[child] = arr[curpos];
arr[curpos] = tmp;
//继续向下比较
curpos = child;
child = 2 * curpos + 1;
}
else
break;
}
}
void test()
{
int arr[] = {
10,5,3,8,7,6 };
Shift_down(arr, sizeof(arr) / sizeof(arr[0]), 0);
}
int main()
{
test();
return 0;
}
Resultado de depuración
Caso de prueba: matriz [10, 5, 3, 8, 7, 6]
Resultados de la salida del pronóstico: [3, 5, 6, 8, 7, 10]
Resultado de salida real: