http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html
//HeapSort by rtt 2014/7/12
//array index from 0
void AjustHeap(int *a, int size, int i)
{
int lchild = i*2 + 1;
int rchild = i*2 + 2;
int max = i;
if (i > size/2 - 1)
return;
if (lchild <= size-1 && a[lchild] > a[max])
max = lchild;
if (rchild <= size-1 && a[rchild] > a[max])
max = rchild;
if (max != i)
{
swap(a[max], a[i]);
for(i=0;i<size;i++)
cout<<a[i]<<"";
cout<<endl;
AjustHeap(a, size, max);
}
}
void BuildHeap(int *a, int size)
{
if (a == NULL || size <=0)
return;
for (int i=size/2 - 1; i>=0; i--)
{
AjustHeap(a, size, i);
}
}
void HeapSort(int *a, int size)
{
if (a == NULL || size <=0)
return;
BuildHeap(a, size);
for (int i=size - 1; i >= 0; --i)
{
swap(a[0], a[i]);
AjustHeap(a, i, 0);
}
}