头疼的快排

啊哈算法中有一道小哼买书的问题:大体为10个同窗报给小哼10本书代号,固然会有人报出重复的(喜爱相同),咱们须要把10本书的代号去重并排序,去重的问题就不贴了由于太简单了,只贴了快排遇到的问题及解决方法(^~^)算法

@大宝剑的带领下通过不懈努力终于把恶心的bug给解决了数组

写出了没有错误的快排函数

---------------------------------------------------------------------------------------------------------测试

记录一下我一堆愚蠢的bugui

附以前的n个bug的代码以及运行结果:spa

bug1:数组通过去重处理后不能正确排序,我测试了一下索引,发现right从7变成1以后变成了-1.net

缘由:当数组为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 ;

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

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

相关文章
相关标签/搜索