#include <stdio.h>
void heapify(int arr[], int root, int len)
{
int L = root * 2 + 1;
int R = root * 2 + 2;
int maxIndex = root;
int temp;
// 如果L还在数组当中
if (L < len && arr[maxIndex] < arr[L])
maxIndex = L;
// 如果R还在数组当中
if (R < len && arr[maxIndex] < arr[R])
maxIndex = R;
if (maxIndex != root) {
temp = arr[root];
arr[root] = arr[maxIndex];
arr[maxIndex] = temp;
heapify(arr, root, maxIndex);
}
}
// 建堆
void buildHeap(int arr[], int len) {
int i;
for (i = len / 2 - 1; i >= 0; i--) {
heapify(arr, i, len);
}
}
// 排序
void heapSort(int arr[], int len) {
int i, temp;
buildHeap(arr, len);
for (i = len - 1; i > 0; i--) {
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapify(arr, 0, i);
}
}
int main()
{
int i;
int arr[] = {9, 10, 8, 2, 3, 4, 1, 5, 6, 7};
heapSort(arr, 10);
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}