【发布时间】:2018-04-30 16:08:01
【问题描述】:
我知道这已经被问了很多,但我无法弄清楚我的问题。
我正在尝试获取时间复杂度,但出现此错误: 线程“主”java.lang.StackOverflowError 中的异常 在 MedianAlgorithm2.Select(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,但仍然出现错误
谢谢。
【问题讨论】:
-
如果在对
Select的初始调用中l和h都小于m或两者都大于m,会发生什么情况?Partition(...)处理得好吗?附带说明一下,您应该花一些时间研究 Java 命名标准以及对方法和变量的建议。 -
您还需要发布
Partition代码。
标签: java exception stack-overflow