1 #include<stdio.h> 2 #include<time.h> 3 #include<algorithm> 4 using namespace std; 5 6 int a[10010]; 7 8 void Sort(int* a,int l,int r)//对数组a的[l,r)区间排序 9 { 10 int len=r-l; 11 if(len<=1) return; 12 int pos = rand() % (r-l); 13 swap(a[l+pos],a[r-1]); 14 int j=0;//比末尾标杆小的数有j个 15 for(int i=l;i<r;i++) 16 { 17 if(a[i]<=a[r-1]) 18 { 19 swap(a[j+l],a[i]); 20 j++; 21 } 22 } 23 Sort(a,l,l+j-1);//比标杆小的数再次排 24 Sort(a,l+j,r);//比标杆大的数 25 } 26 27 int main() 28 { 29 srand(time(NULL)); 30 int n,i; 31 scanf("%d",&n); 32 for(i=1;i<=n;i++) 33 { 34 scanf("%d",&a[i]); 35 } 36 Sort(a,1,n+1); 37 for(i=1;i<=n;i++) 38 printf("%d ",a[i]); 39 printf(" "); 40 return 0; 41 }