[英]stackoverflow error in quicksort
所以我一直在努力實現一個快速排序,但它會產生一個stackoverflower錯誤,但我似乎無法找到原因。
有人能幫我嗎?
public static int partition(int[] a, int p, int q){
int i = 0;
for (int j = p; j < q; ++j){
if(a[j] <= a[q]){
int tmp = a[j];
a[j] = a[i];
a[i] = tmp;
i++;
}
}
int tmp = a[i];
a[i] = a[q];
a[q] = tmp;
return i;
}
public static void qsort(int[] a, int p, int q){
if(p < q){
int x = partition(a, p, q);
qsort(a, p, x - 1);
qsort(a, x + 1, q);
}
}
public static void main(String args[]){
int[] a = {4, 6, 2, 9, 8, 23, 0, 7};
qsort(a, 0, a.length - 1);
for(int i : a){
System.out.print(i + " ");
}
}
堆棧溢出錯誤意味着永遠不會達到遞歸的停止條件,在這種情況下p < q
永遠不會為真。 使用調試器,為該行設置斷點,並查找使用相同參數重復遞歸調用qsort()
時間。
有幾個錯誤,但你正在擊中的直接錯誤是在partition()
, i
不限制在p
和q
之間。 你很快就會陷入p=2
, q=3
但i
的最終值為1
。 這會導致無限遞歸,因為qsort()
一直使用相同的參數調用自身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.