#include <stdlib.h>
#include <iostream>
using std::cout;
using std::endl;
#define N 10
#define M 100
#define SWAP(x,y) {int tmp=x; x=y; y=tmp;}
void print(int *a)
{
for(int i=0; i<N; ++i)
{
printf("%3d", a[i]);
}
printf("\n");
}
void adjustMaxHeap(int *a, int pos, int len)
{
int dad = pos;
int son = 2*dad+1;
while(son < len)
{
if(son+1 < len && a[son] < a[son+1])
{
son = son+1;
}
if(a[dad] < a[son])
{
SWAP(a[dad], a[son]);
dad = son;
son = 2 * dad + 1;
}
else
{
break;
}
}
}
void heapSort(int *a)
{
for(int i=N/2-1; i>=0; --i)
{
adjustMaxHeap(a, i, N);
}
SWAP(a[0], a[N-1]);
for(int i=N-1; i>1; --i)
{
adjustMaxHeap(a, 0, i);
SWAP(a[0], a[i-1]);
}
}
int main()
{
srand(time(NULL));
int *a = (int*)malloc(sizeof(int)*N);
for(int i=0; i<N; ++i)
{
a[i] = rand() % M;
}
print(a);
heapSort(a);
print(a);
free(a);
return 0;
}