#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; }