#include"iostream"
#include"cstdio"
#include"cstring"
#include"ctime"
using namespace std;
int a[1000000];
void quick_rand(int *a,int l,int r){
int i,j,t,random;
i=l;
j=r;
random=a[(i+j)/2]; //随机在此处,比较值可以随机指定,一般你可以取中值
while(i<j)//i<=j有时超时
{
// 循环条件,i<=j ,也就是循环退出时,i>j,所以后面quick_rand(a,l,j);不会和 //quick_rand(a,i,r);有交集
while(i<r&&a[i]<random)i++; //循环条件i<r,整趟遍历;a[i]<random 递增,没有等号!
while(j>l&&a[j]>random)j--;
if(i<=j){ // 有等号!虽然等号时,自己跟自己交换,没意义,但是 i++ j--!!
t=a[i]; //交换
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
if(l<j)
quick_rand(a,l,j);
if(i<r)
quick_rand(a,i,r);
}
/****************************/
int main()
{
int n,i;
while(cin>>n)
{
for(i=0;i<n;i++)
{scanf("%d",&a[i]);}
quick_rand(a,0,n-1);
printf("%d",a[0]);
for(i=1;i<n;i++)
{
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}
快排
最新推荐文章于 2024-02-28 16:20:09 发布