头疼的快排

啊哈算法中有一道小哼买书的问题:大致为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 ;

哇!终于没问题了感动的我老泪纵横

-------------------------------------------------------------------------------------------------------------

猜你喜欢

转载自my.oschina.net/u/3787168/blog/1626574