CRA研究的快速排序目前是效率最高的排序,这种排序看着感觉效率不高,但是在实测中展现出比其他的排序算法效率高出很多
算法采用一个对比的标识称为枢轴,算法的实现如下:
首先除传入序列外,这个算法还需要传入两个静态参数,一个是排序序列的最左边下标,另一个是最右边下标:这里分别设为left和right,本实现是以左边元素为枢轴,在实际中可以选择左中右都可以,然后从第二个数和倒数第一个数与枢轴进行比较,前面小于枢轴的数和后面大于枢轴的数进行交换,这样排序完成,将第j个数和最左边的枢轴进行交换,然后对第j+1个元素的左右两边进行同样处理,采用递归,这样代码就很简洁了。
template
void Qsort(T *a, const int left, const int right)
{
if(left < right){
int i = left;
int j = right +1;
T p = a[left];
do
do i++; while(a[i]>p);
do j–; while(a[j] <p);
if(i <j)
std::swap(a[i],a[j]);
while(i <j);
std::swap(a[left],a[j]);
Qsort(a,left, j-1);
Qsort(a,j+1, right);
}
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布