stackoverflow错误

6pp0gazn  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(223)

我正在使用下面链接的dualpivotquicksort算法。在数组大小达到100.000索引之前,一切正常。当我将大小设置为100.000并在数组中增加或减少数字时,我的程序崩溃并出现stackoverflow错误。使用随机数时没有问题,即使是长度为100.000的数组。https://cs.stackexchange.com/questions/24092/dual-pivot-quicksort-reference-implementation

void sort(int[] A, int left, int right) {
    if (right > left) {
        // Choose outermost elements as pivots
        if (A[left] > A[right]) swap(A, left, right);
        int p = A[left], q = A[right];

        // Partition A according to invariant below
        int l = left + 1, g = right - 1, k = l;
        while (k <= g) {
            if (A[k] < p) {
                swap(A, k, l);
                ++l;
            } else if (A[k] >= q) {
                while (A[g] > q && k < g) --g;
                swap(A, k, g);
                --g;
                if (A[k] < p) {
                    swap(A, k, l);
                    ++l;
                }
            }
            ++k;
        }
        --l; ++g;

        // Swap pivots to final place
        swap(A, left, l); swap(A, right, g);

        // Recursively sort partitions
        sort(A, left, l - 1);
        sort(A, l + 1, g - 1);
        sort(A, g + 1, right);
    }
}

   void swap(int[] A, int i, int j) {
    final int tmp = A[i]; A[i] = A[j]; A[j] = tmp;
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题