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 }