递归实现的快速排序。
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX_N 1005
#define EPS 1e-10
using namespace std;
typedef long long int ll;
/******************************************************************
函数名称: select
参数 : a 要排序的数组, s 左端点, e 右端点
功能 : 在a[s]......a[e]之间找到一个“主元”,并返回主元的位置
*******************************************************************/
int select(int*a,int s,int e)
{
int Index=rand()/RAND_MAX*(e-s+1)+s,j=s,i=s+1;
swap(a[Index],a[s]);
while(i<=e)
{
if(a[i]>a[s])i++;
else swap(a[i++],a[++j]);
}
swap(a[s],a[j]);
return j;
}
/******************************************************************
函数名称: QuickSort
参数 : a 要排序的数组, s 左端点, e 右端点
功能 : 将a[s]......a[e]这一段数字快速排序
*******************************************************************/
void QuickSort(int*a,int s,int e)
{
if(s>=e)return;
int m=select(a,s,e);
QuickSort(a,s,m-1);
QuickSort(a,m+1,e);
}
int main()
{
int n;
cin>>n;
int*a=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
srand((unsigned)time(0)); //采用随机选取主元算法
QuickSort(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d%c",a[i],i<n-1?' ':'\n');
delete[]a;
return 0;
}