簡體   English   中英

快速排序中的stackoverflow錯誤

[英]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不限制在pq之間。 你很快就會陷入p=2q=3i的最終值為1 這會導致無限遞歸,因為qsort()一直使用相同的參數調用自身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM