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("\n");
40 return 0;
41 }