易错的快排---qsort()
来看看快速排序的几个易错点:
void qsort(int l,int r) { long long mid=a[(l+r)>>1]; //*1 千万不可以写成: mid=(l+r)>>1 然后:while(a[i]<a[mid]) i++; //因为数组的顺序在变化,当i越过mid的时候,会因为a[i]==a[mid]而退出 //那样你锁定的就不是中间值,而是中间位置了 int i=l,j=r; do { while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { swap(a[i],a[j]); i++; j--; } }while(i<=j);//记住一定要加等号 if(l<j) qsort(l,j);//这里不加 if(r>i) qsort(i,r); }