2017-07-17 59 views
-2

我想寫快速排序算法。我跟着一個在線教程,幾乎做了同樣的事情,但我得到一個StackOverFlow錯誤。我已經作爲參數傳遞的數組是[1,2,3,4,5,5,4,3,2,1]。Quicksort給予StackOverFlow錯誤

在快速排列方法中,println語句在第一個循環[1,4,3,2,1,2,3,4,5,5]之後輸出。

這是怎麼回事?

+2

您可以使用調試器來執行程序的步驟,並查看它出錯的地方。 – Henry

回答

3

您計算樞軸錯了,這不是:

int pivot = nums[(low + (high - low))/2]; 

是:

int pivot = nums[low + ((high - low)/2)]; 

Division在數學方面具有比sum更高的優先級和sub

換句話說,你可以把它寫成:

int pivot = nums[low + (high - low)/2]; 

,你會發現另一個問題,是你的田地,你是不是要求的支點,你所要求的樞軸nums[pivot]的位置的數字,它應該是:

while (array[i] < pivot) { 
    i++; 
    } 

    while (array[j] > pivot) { 
    j--; 
    } 

最後,是不是交換機while i<=j它是:

if (i <= j) { 
    int temp = nums[i]; 
    nums[i] = nums[j]; 
    nums[j] = temp; 
    i++; 
    j--; 
    }