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 }