繁体   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