啊哈算法中有一道小哼買書的問題:大體爲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 ;
哇!終於沒問題了感動的我老淚縱橫
-------------------------------------------------------------------------------------------------------------