“main”java.lang.StackOverflower用于给定算法分析

“main”java.lang.StackOverflower用于给定算法分析,java,exception,stack-overflow,Java,Exception,Stack Overflow,我知道有人问了我很多问题,但我无法解决我的问题 我试图获得时间复杂度,但我得到以下错误: 主线程java.lang.StackOverflowerr中出现异常 在MedianAlgorithm2.选择MedianAlgorithm2.java:22 当我传递一个大于100000的数组时 递归选择方法如下: public static int Select(int[] A, int l, int m, long h) { int pos = Partition(A, l, h);

我知道有人问了我很多问题,但我无法解决我的问题

我试图获得时间复杂度,但我得到以下错误: 主线程java.lang.StackOverflowerr中出现异常 在MedianAlgorithm2.选择MedianAlgorithm2.java:22

当我传递一个大于100000的数组时

递归选择方法如下:

public static int Select(int[] A, int l, int m, long h) {   
    int pos = Partition(A, l, h);
    if (pos == m) {
        return A[pos];
    }
    if (pos > m) {
        return Select(A, l, m, pos - 1);
    }
    if (pos < m) {
        return Select(A, pos + 1, m, h); // this is line 22 mentiond in exception
    }
    return 0;
}

public static int Partition(int[] A, int l, long h) {
    int pivotval = A[l];
    int pivotloc = l;   
    for (int j = l+1; j <= h; j++) {
        if (A[j] < pivotval) {
            pivotloc = pivotloc + 1;
            int temp = A[pivotloc];
            A[pivotloc] = A[j];
            A[j] = temp;
        }
    }
    int temp = A[l];
    A[l] = A[pivotloc];
    A[pivotloc] = temp;
    return pivotloc;
}
我已将h从int改为long,但仍有一个错误


谢谢。

您的JVM内存不足。你只需要分配更多

StackOverflowerr?因为内存不足?请解释您的推理。如果在选择l和h的初始调用中,l和h都小于m或都大于m,会发生什么情况?分区是否。。。处理得好吗?另一方面,您应该花一些时间研究java命名标准以及方法和变量的建议。您还需要发布分区代码。