第七章 快速排序
template <class T>
int Partition(T* a,int p,int r)
{
T x = a[r];
int i = p;
for (int j = p; j < r; ++j)
{
if (a[j] <= x)
{
swap(a[i],a[j]);
i++;
}
}
swap(a[i],a[r]);
return i;
}
template <class T>
void _QuickSort(T* a,int p,int r)
{
if (p < r)
{
int q = Partition(a,p,r);
_QuickSort(a,p,q - 1);
_QuickSort(a,q + 1,r);
}
}
template <class T>
void QuickSort(T* a,int n)
{
_QuickSort(a,0,n - 1);
}
为了获得较好的平均性能,加随机化变量
template <class T>
int RandomizePartition(T* a,int p,int r)
{
time_t
srand((unsigned long)time(0));
int i = rand()%(r - p + 1) + p;
swap(a[i],a[r]);
return Partition(a,p,r);
}
template <class T>
void _RandomQuickSort(T* a,int p,int r)
{
if (p < r)
{
int q = RandomizePartition(a,p,r);
_RandomQuickSort(a,p,q - 1);
_RandomQuickSort(a,q + 1,r);
}
}
template <class T>
void QuickSort(T* a,int n)
{
_RandomQuickSort(a,0,n - 1);
}