#include<stdio.h>
void AdjustHeap(int A[], int i, int n) {
int j, tmp, tmpid;
for( ; i * 2 + 1 < n; i++) {
if(i * 2 + 2 >= n) {
tmp = A[i * 2 + 1];
tmpid = i * 2 + 1;
}
else if (A[i * 2 + 1] > A[i * 2 + 2]) {
tmp = A[i * 2 + 1];
tmpid = i * 2 + 1;
}
else {
tmp = A[i * 2 + 2];
tmpid = i * 2 + 2;
}
if(tmp > A[i]) {
A[tmpid] = A[i];
A[i] = tmp;
}
}
}
void MakeHeap(int A[], int n) {
int i;
for(i = n/2; i >= 0; i--) {
AdjustHeap(A, i, n);
}
}
void HeapSort(int A[], int n) {
int i, tmp;
for(i = 0; i < n; i++) {
tmp = A[n - i - 1];
A[n - i - 1] = A[0];
A[0] = tmp;
AdjustHeap(A, 0, n - i - 1);
}
}
void main() {
int A[] = {2, 4, 5, 6, 7, 8, 1, 3};
int n = 8;
MakeHeap(A, n);
int i;
for(i = 0; i < n; i++) printf("%d ", A[i]);
printf("\n");
HeapSort(A, n);
for(i = 0; i < n; i++) printf("%d ", A[i]);
printf("\n");
}