啊哈算法中有一道小哼买书的问题:大致为10个同学报给小哼10本书代号,当然会有人报出重复的(喜好相同),我们需要把10本书的代号去重并排序,去重的问题就不贴了因为太简单了,只贴了快排遇到的问题及解决方法(^~^)
在@大宝剑的带领下经过不懈努力终于把恶心的bug给解决了
写出了没有错误的快排
---------------------------------------------------------------------------------------------------------
记录一下我一堆愚蠢的bug
附之前的n个bug的代码以及运行结果:
bug1:数组经过去重处理后不能正确排序,我测试了一下索引,发现right从7变成1之后变成了-1
原因:当数组为20 40 32 67 89 300 400 15的时候从右往左开始查找,找出15小于基准数停下则r=7,接下来从左向右开始查找,40大于基准数停下此时l=1,交换15和40
此时应该继续从右向左开始查找小于基准数,但是直到r==l,@大宝剑的讲解
递归进去之后quickSort(0,-1);此时l>r,只有当l<r时才执行递归,但是我并没有判断l>r时不执行该函数所以应该加入如下代码:
if(l>r){
return;//结束函数
}
愉快的解决了跳不出递归函数进入死循环问题
----------------------------------------------------------------------------------------------------------
在我正要开心准备结束bug的时候,出了bug2
输出的数应该是按顺序排好没有重复的数,但是为什么会这样????
找到了这里出了问题
我愚蠢的以为a[l]和a[r]分别是两个数,结果其实l==r,所以a[l]和a[r]是一个值,这种写法把a[l]=key时顺便把a[r]也覆盖了此时a[r]=key,导致最后的key=a[r]相当于key=key毫无意义(-_-)!!!因此改成:
a[left]=a[l];a[l]=key ;
哇!终于没问题了感动的我老泪纵横
-------------------------------------------------------------------------------------------------------------