頭疼的快排

啊哈算法中有一道小哼買書的問題:大體爲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 ;

哇!終於沒問題了感動的我老淚縱橫

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

相關文章
相關標籤/搜索