#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
本文介绍了一种高效的排序算法——堆排序。通过调整数组元素形成最大堆,并将最大元素逐个移至数组尾部的方式实现排序。文章详细展示了堆排序的核心过程,包括调整最大堆和递归排序两个关键步骤。
2743

被折叠的 条评论
为什么被折叠?



