易错的快排---qsort()
Posted Captain_Von
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了易错的快排---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); }
以上是关于易错的快排---qsort()的主要内容,如果未能解决你的问题,请参考以下文章