快排的具体思路不再介绍,也就是利用分治与递归对数据进行处理,下面是一种我发现的很简单的实现方式,并且思路比较清晰,如下:
#include <stdlib.h>
#include <stdio.h>
//using namespace std;
//void quicksort(int l, int u);
int a[7] = {7,3,2,1,6,4,5};
void swap(int i,int j)
{
int b = 0;
b = a[i];
a[i] = a[j];
a[j] = b;
}
int random(int i,int j)
{
return rand()%(j+1-i) + i;
}
void quicksort(int l, int u)
{
int i, m;
if (l >= u) return;
swap(l, random(l,u));
m = l;
for (i = l+1; i <= u; i++)
{
if (a[i] < a[l])
swap(++m, i);
}
swap(l, m);
quicksort(l, m-1);
quicksort(m+1, u);
}
int main(void)
{
quicksort(0, 6);
for (int s = 0;s < 7;s++)
{
printf("%d ",a[s]);
}
getchar();
return 0;}
}
待修改:
// 两个分区递归。基准元素无需在参与下一次快速排序
// 加入if判断可以减少50%-55%的递归次数
if
(left < low - 1)
DoSort<T>(arr, left, low - 1, SelectPivot);
if
(low + 1 < right)
DoSort<T>(arr, low + 1, right, SelectPivot);