1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4
5 using namespace std;
6
7 int z[100],n;
8
9 //快速排序的思想是递归
10 //以当前区间中的某个元素为基准 将比它小的放到前面 比它的放到后面 这样之后可以分而治之 因为以它为一个值的分界已经将比它小的放到了前半部分 比它大的放到了后面部分 这样便可以又对前半部分和后半部分执行同样的递归操作 最终完成排序
11
12 void qsort(int a,int b)//当前要处理a-b这个区间
13 {
14 int c=a,d=b;
15 int e=z[(a+b)>>1];//e是基准值 我们取这个区间中间的值作为基准值 当然其他的值也可以
16 int f;//f仅作为交换元素时的一个辅助变量
17 while(c<=d)//如果中间还有一段没有处理
18 {
19 while(z[c]<e)
20 c++;//找到一个大于等于基准值的数
21 while(z[d]>e)
22 d--;//找到一个小于等于基准值的数
23 if(c<=d)//如果较大的那个数在较小的那个数之前 我们就需要交换这两个数的位置
24 {
25 f=z[c];
26 z[c]=z[d];
27 z[d]=f;//交换
28 c++;
29 d--;
30 }
31 }
32 //这样做完一次之后 我们可以保证 (d+1)到(c-1)这个区间内的元素是有序的
33 if(c<b) qsort(c,b);//处理左边还未排序的区间
34 if(a<d) qsort(a,d);//处理右边还未排序的区间
35 }
36
37 int main()
38 {
39 scanf("%d",&n);//读入有多少个数
40 for (int a=1;a<=n;a++)
41 scanf("%d",&z[a]);//读入每一个数
42 qsort(1,n);//我们需要处理1-n这个区间里的所有数
43 //sort(z+1,z+n+1);//这是c++自带的那个函数 需要在前面加上 #include<algorithm>
44 for (int a=1;a<=n;a++)
45 printf("%d\n",z[a]);//输出
46
47 return 0;
48 }