Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行dualPivotQuickSort时发生堆栈溢出错误_Java_Sorting_Runtime Error_Stack Overflow_Quicksort - Fatal编程技术网

Java 执行dualPivotQuickSort时发生堆栈溢出错误

Java 执行dualPivotQuickSort时发生堆栈溢出错误,java,sorting,runtime-error,stack-overflow,quicksort,Java,Sorting,Runtime Error,Stack Overflow,Quicksort,我正在使用下面链接的dualPivotQuickSort算法。在数组大小具有100.000索引之前,一切正常。当我设置大小100.000并在数组中增加或减少数字时,我的程序崩溃并出现StackOverflow错误。使用随机数时没有问题,即使是长度为100.000的数组。 void排序(int[]A,int左,int右){ 如果(右>左){ //选择最外面的图元作为轴 如果(A[左]>A[右])交换(A,左,右); int p=A[左],q=A[右]; //根据下面的不变量划分A int l=左

我正在使用下面链接的dualPivotQuickSort算法。在数组大小具有100.000索引之前,一切正常。当我设置大小100.000并在数组中增加或减少数字时,我的程序崩溃并出现StackOverflow错误。使用随机数时没有问题,即使是长度为100.000的数组。

void排序(int[]A,int左,int右){
如果(右>左){
//选择最外面的图元作为轴
如果(A[左]>A[右])交换(A,左,右);
int p=A[左],q=A[右];
//根据下面的不变量划分A
int l=左+1,g=右-1,k=l;
while(k=q){
而(A[g]>q&k
调试您的程序。对于堆栈溢出错误,最好的方法是添加一个print语句来打印每个递归方法调用的参数值。当错误发生时,最后几行将显示导致太深递归的模式。所以添加
System.out.println(左+”,“+右)    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;
}