-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]之後輸出。
這是怎麼回事?
我想寫快速排序算法。我跟着一個在線教程,幾乎做了同樣的事情,但我得到一個StackOverFlow錯誤。我已經作爲參數傳遞的數組是[1,2,3,4,5,5,4,3,2,1]。Quicksort給予StackOverFlow錯誤
在快速排列方法中,println語句在第一個循環[1,4,3,2,1,2,3,4,5,5]之後輸出。
這是怎麼回事?
您計算樞軸錯了,這不是:
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--;
}
您可以使用調試器來執行程序的步驟,並查看它出錯的地方。 – Henry