#include <stdio.h>
#include <stdlib.h>
#include<cstring>
#include<math.h>
void swap(int* Ina, int* Inb)
{
int temp = *Ina;
*Ina = *Inb;
*Inb = temp;
};
void adjust(int arr[], int start, int end) {
int len = end - start + 1;
for (int i = floor(len / 2) - 1; i >= 0; i--) {
int max = 0;
if (i * 2 + 2 < len) {
max = (arr[2 * i + 1] > arr[2 * i + 2]) ? (2 * i + 1) : (2 * i + 2);
printf("has two children");
}
else {
max = 2 * i + 1;
};
if (arr[i] < arr[max]) {
swap(&arr[i], &arr[max]);
};
};
};
void heapsort(int arr[], int len) {
//build heap
adjust(arr, 0, len);
int last = len - 1;
for (int j = 0; j < len; j++) {
swap(&arr[0], &arr[last]);
last--;
adjust(arr, 0, last);
};
};
int main()
{
int arr[] = { 1,4,9,5,7 };
heapsort(arr, 5);//从小到大排序
for (int i = 0; i < 5; i++) {
printf("%d", arr[i]);
};
system("pause");
return 0;
}