#include <stdio.h>
void HeadAdjust(int A[], int k, int len) {
A[0] = A[k];
for (int i = 2 * k; i < len; i *= 2) {
if (i < len&&A[i] < A[i + 1]) {
i++;
}
if (A[0] > A[i])
break;
else
{
A[k] = A[i];
k = i;
}
}
A[k] = A[0];
}
void BulidMaxHeap(int A[], int len) {
for (int i = len / 2; i > 0; i--) {
HeadAdjust(A, i, len);
}
}
void HeapSort(int A[], int len) {
BulidMaxHeap(A, len);
int temp;
for (int i = (len-1); i >1; i--)
{
temp = A[i];
A[i] = A[1];
A[1] = temp;
HeadAdjust(A, 1, i - 1);
}
}
int main() {
int A[] = { 0,69,5,3,12,1 };
HeapSort(A, 6);
for (int i = 1; i < 6; i++)
{
printf("%d\n", A[i]);
}
return 0;
}