链接
每次选取一个基值,进行排序,寻找一个位置,将基值放入,使左侧的值都比基值小,右侧的值都比基值大。重复此操作知道序列有序。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int n,a[maxn];
void quicksort(int l,int r)
{
int mid=a[(l+r)>>1];
int i=l,j=r;
do
{
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j) swap(a[i++],a[j--]);
}while(i<=j);
if(l<j) quicksort(l,j);
if(i<r) quicksort(i,r);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}