1 #include<stdio.h>
2
3 int a[101],n;
4 void quicksort(int left,int right) // 数组的左端和右端
5 {
6 int i,j,temp; //i,j左右两端移动的两个指针
7 if(left > right) return; //多次循环后只剩一个数字时结束(看不懂先往后看)
8
9 temp = a[left]; //选定最左端为基准点
10 i = left,j = right; //i从左端开始 j从右端开始
11 while(i!=j) //i,j不相同就继续执行循环
12 {
13 while(a[j] >= temp && i < j ) //***(注意)一定要先从右端开始移动,因为最终要停留在一个比基准点小的数上,与基准点交换
14 j--;
15 while(a[i] <= temp && i < j )
16 i++;
17
18 if(i != j) //或者i < j,执行交换
19 {
20 int t;
21 t = a[i];
22 a[i] = a[j];
23 a[j] = t;
24 }
25 }
26 a[left] = a[i]; //交换基准点与选定中点
27 a[i] = temp;
28 quicksort(left,i-1); //对已分好的前半部分 排序
29 quicksort(i+1,right); //对已分好的后半部分 排序
30 return;
31 }
32 int main()
33 {
34 int i,j;
35 scanf("%d",&n);
36
37 for(i = 0;i<n;i++)
38 scanf("%d",&a[i]);
39
40 quicksort(0,n-1);
41
42 for(i = 0;i < n;i++)
43 printf("%d",a[i]);
44
45 return 0;
46 }