在快排或者二分时,我们经常需要取中间值
int x = q[l+r>>1];
int index = l+r>>1;
int x = q[index];
第二种方法可能会出错。比如下列快排版本:
quick_sort(int q[], int l, int r){
if(l>=r) return ;
int mid = l+r>>1;
int i = -1, j = r+1;
while(i < r){
do i++; while(q[i] < q[mid]);
do j--; while(q[j] > q[mid]);
if(i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j);
quick_sort(q. j+1, r);
}
由于数组会被修改,虽然mid不变,但q[mid]是变化的。
感谢SolitudeAlma 同学的帮助。
快排需要的是初始的中间值,也不是中间下标的值,快排的过程中间值可能会被换位置,比较的时候不能用q[mid]去比较,我猜你可能用了这个方法
感谢!我已修改。再次感谢!
不用客气哦~
啊这