建堆&堆排序
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <string>
#define MAX_SIZE 9
using namespace std;
void AdjustHeap(int array[], int i, int n)
{
int max_temp = array[i];
int j = 2 * i + 1; //left
while (j < n - 1) {
if (j < n - 1 && array[j + 1] > array[j]) {
j++;
}
if (max_temp > array[j]) {
break;
}
array[(j - 1) / 2] = array[j];
array[j] = max_temp;
j = 2 * j + 1;
}
}
int main()
{
int array[MAX_SIZE] = {1, 6, 3, 4, 2, 9, 0, 8, 5};
for (int i = (MAX_SIZE - 2 / 2); i >= 0; i--) {
AdjustHeap(array, i, MAX_SIZE);
}
for (int i = 0; i < MAX_SIZE; i++) {
printf("%d\t", array[i]);
}
printf("\n");
for (int i = MAX_SIZE - 1; i > 0; i--) {
int temp = array[0];
array[0] = array[i];
array[i] = temp;
AdjustHeap(array, 0, i);
}
for (int i = 0; i < MAX_SIZE; i++) {
printf("%d\t", array[i]);
}
printf("\n");
return 0;
}