acwing-快速排序
快速排序
快速排序有三个地方容易写错,今天终于全弄明白了。
先来看代码
1 |
|
易错点1
这里不能写成
int mid=l+r>>1
,这里如果记录的是下标会出错。因为后边元素交换后,a[mid]
就不一定等于pivot
了易错点2
不能省略判断,
i
是有可能比j
大的。易错点3
考虑数组为
[1,1]
的情况,mid
为1
第一次循环,
i
停在下标0
,j
停在下标1
,两数交换第二次循环,
i
停在下标1
,j
停在下标0
,不满足交换条件执行递归操作。如果写成
quick(l,i);quick(i+1,r);
下标就会越界。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 面试资料!