#include <stdlib.h>
/**
* 堆排序
* */
void heapify(int arr[], int i, int n)
{
int l = 2 * i + 1;
int r = 2 * i + 2;
int maxIndex = i;
if (l < n && arr[i] < arr[l])
{
maxIndex = l;
}
if (r < n && arr[maxIndex] < arr[r])
{
maxIndex = r;
}
if (maxIndex != i)
{
swap(arr, i, maxIndex);
heapify(arr, maxIndex, n);
}
}
void heapSort(int arr[], int n)
{
//建堆
int i;
for (i = n / 2 - 1; i >= 0; i--)
{
heapify(arr, i, n);
}
//排序
for (i = n - 1; i > 0; i--)
{
swap(arr, 0, i);
heapify(arr, 0, i);
}
}
int main(int argc, char **argv)
{
int arr[] = {34, 2, 1, 4, 353, 32, 53, 4, 534, 46};
int len = sizeof(arr) / sizeof(int);
heapSort(arr, len);
print(arr, len);
}