【发布时间】:2014-05-13 18:06:02
【问题描述】:
我的代码适用于 10000 但不适用于 100000 个数字。
错误发生在
result.add(next);
result.addAll(mergeInt(left,right));
代码如下:
private static ArrayList<Integer> mergeSortInt(ArrayList<Integer> array)
{
if (array.size() <= 1) return array;
ArrayList<Integer> left = new ArrayList<>();
ArrayList<Integer> right = new ArrayList<>();
for (int i = 0; i < array.size() / 2; i++)
{
left.add(array.get(i));
}
for (int i = array.size() / 2; i < array.size(); i++)
{
right.add(array.get(i));
}
return mergeInt(mergeSortInt(left), mergeSortInt(right));
}
private static ArrayList<Integer> mergeInt(ArrayList<Integer> left, ArrayList<Integer> right)
{
if (left.size() == 0) return right;
if (right.size() == 0) return left;
ArrayList<Integer> result = new ArrayList<Integer>();
int next;
if (left.get(0) > right.get(0))
{
next = right.get(0);
right.remove(0);
}
else
{
next = left.get(0);
left.remove(0);
}
result.add(next);
result.addAll(mergeInt(left,right));
return result;
}
StackOverFlowError 到底是什么?为什么它只发生在大量数字上?
提前致谢:)
编辑:
我真的不明白这是怎么重复的,因为我还专门针对我的代码寻求帮助。
【问题讨论】:
-
方法调用进入堆栈。当你递归到太深的层次时,你的溢出你的堆栈会试图在上面放太多东西。它(以抽象的方式)类似于代码中的无限循环(或只是一个非常长的循环)。
-
@JesanFafon - “当你重复太深时......”。是的,这经常让你反复诅咒,但这完全是另一个词。
标签: java mergesort stack-overflow