我的朋友有一個小問題,我在我的知識結束。他寫了一個簡單的(他在學校)QuickSort算法它會產生一個StackOverflow錯誤。我知道這意味着它會在某個地方多次調用遞歸,但我無法獲得邏輯錯誤 - 請幫助我!提供堆棧溢出錯誤的簡單QuickSort算法?
下面是代碼(我要離開了一些代碼,這只是顯示它在2文本區域):
int array [] = new int [10];
...
public static void quicksort (int array[],int l,int r){
int i = l;
int j = r;
int mitte = array [(l+r)/2];
while (i<j) {
while (array[i]<mitte) {
i++;
} // end of if
while (mitte<array[i]) {
j--;
} // end of if
if (i<=j) {
int merke =array[i];
array[i] = array [j];
array [j] = merke ;
i++;
j--;
} // end of if
if (i<j) {
quicksort(array,l,j);
} // end of if
if (l<r) {
quicksort(array,l,r);
} // end of if
} // end of while
}
它被稱爲是這樣的:
quicksort(array,0,9);
但,如果我們稱之爲2號碼,它不會產生溢出。
如果需要更多的代碼,這裏是引擎收錄的全碼:http://pastebin.com/cwvbwXEu
這似乎是我的朋友從一個簡單的抄板錯誤。謝啦。 – Marenthyu
還要注意,遞歸不應該在while循環中。快速排序是(1)將數組分成兩組,一組全部低於你的「數據透視」中間數字和一個以上,然後(2)用一次調用將每個組排序,每組快速排序。 – mackworth