My code works fine for 10000 but not for 100000 numbers.
The error occurs at
result.add(next);
result.addAll(mergeInt(left,right));
Here's the code:
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;
}
What exactly is a StackOverFlowError? And why does it only occur for a larger amount of numbers?
Thanks in advance :)
EDIT:
I don't really see how this is a duplicate since I'm also asking for help specifically with my code.