#ifndef HEAPSORT_H_
#define HEAPSORT_H_
template <typename T>
void Adjust(T arr[],int n,int k)
{
T *min=((2*k+1)<n+1 && arr[2*k]>arr[2*k+1]) ? &arr[2*k+1] : &arr[2*k];
if(arr[k]>*min)
{
T t=*min;
*min=arr[k];
arr[k]=t;
}
}
template <typename T>
void Sort(T arr[],int n)
{
if(n<2)
{
return;
}
int k=n/2;
for(int i=k;i>0;--i)
{
Adjust(arr,n,i);
}
T t=arr[1];
arr[1]=arr[n];
arr[n]=t;
Sort(arr,n-1);
}
#endif