下面代码注释有具体解释,这里就不多说,直接上代码
1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 5 #define maxsize 1000 6 int a[maxsize],n; 7 8 void quickSort(int left,int right) 9 { 10 int i,j,temp; 11 if(left>right) 12 return; 13 14 //存储基准数 15 temp = a[left]; 16 i=left; 17 j=right; 18 while(i!=j) 19 { 20 //先从右往左找,这是必须的 21 while(a[j]>=temp && i<j) 22 j--; 23 //从左往右找 24 while(a[i]<=temp && i<j) 25 i++; 26 //如果没有相遇,就交换 27 if(i<j) 28 { 29 swap(a[i],a[j]); 30 } 31 } 32 //最后将第一个数与i现在的数交换,这样就将一个数的位置确定了,左边都比他小,右边都比他大 33 a[left]=a[i]; 34 a[i]=temp; 35 36 //用递归的思想将左边和右边的无序序列都进行排序,每次确定一个数,当left比right大的时候全部就排序完成了 37 quickSort(left,i-1); 38 quickSort(i+1,right); 39 } 40 41 int main() 42 { 43 scanf("%d",&n); 44 for(int i=1; i<=n; i++) 45 { 46 scanf("%d",&a[i]); 47 } 48 quickSort(1,n); 49 50 for(int i=1; i<=n; i++) 51 { 52 printf("%d ",a[i]); 53 } 54 printf(" "); 55 56 }