第六章 堆排序
template <class T>
void MaxHeapify(T* a,int i,int n)
{
int l,r,largest;
if (i >= n/2)
{
return;
}
for (int j = i; j < n/2;)
{
l = 2*j + 1;
r = 2*j + 2;
if (l < n && a[l] > a[j])
{
largest = l;
}
else
{
largest = j;
}
if (r < n && a[r] > a[largest])
{
largest = r;
}
if (largest != j)
{
swap(a[j],a[largest]);
j = largest;
}
else
{
break;
}
}
}
template <class T>
void BuildMaxHeap(T* a,int n)
{
for (int i = n/2 - 1; i >= 0; --i)
{
MaxHeapify(a,i,n);
}
}
template <class T>
void HeapSort(T* a,int n)
{
BuildMaxHeap(a,n);
for (int i = n - 1; i >= 1; --i)
{
swap(a[0],a[i]);
MaxHeapify(a,0,i);
}
}