边界情况害人不浅
1 #include<cstdio> 2 3 using namespace std; 4 5 void qsort(int,int); 6 7 int n,t,a[100005]; 8 9 int main(){ 10 scanf("%d",&n); 11 for(int i=1;i<=n;i++)scanf("%d",a+i); 12 qsort(1,n); 13 for(int i=1;i<=n;i++)printf("%d ",a[i]); 14 15 return 0; 16 } 17 18 void qsort(int l,int r){ 19 int i=l,j=r,k=a[(l+r)>>1]; 20 21 while(i<=j){ //<=的目的:将i=j的情况继续处理,直至i>j,下面的i<=j同理 22 while(a[i]<k)i++; //<的目的:若用<=,则会在数据为大量重复数字时发生数组越界 23 while(a[j]>k)j--; //同上 24 if(i<=j){ 25 t=a[i]; 26 a[i]=a[j]; 27 a[j]=t; 28 i++; 29 j--; 30 } 31 } 32 33 if(l<j)qsort(l,j); //递归边界判断置于上层以节省时间 34 if(i<r)qsort(i,r); 35 }