Проблема заключается в вашем while
коде, и более конкретно при использовании метода poll()
.
Вы имели:
if (sFirst.peek() >= sSecond.peek())
temp = sFirst.poll(); // Mention point
else
temp = sSecond.poll();
когда вы должны были:
if (sFirst.peek() >= sSecond.peek())
temp = sSecond.poll(); // Mention point
else
temp = sFirst.poll();
Раньше, во входных данных, подобных этому:
sFirst = [-9, 1, 2, 9, 89] and sSecond = [4, 15, 18, 23, 31, 123]
у вас будет if (-9 >= 4)
, что будет ложным, так что вы сделаете часть else
, которая будет poll()
с sSecond
, хотя вы должны poll()
с sFirst
. -9
должен быть первым элементом, добавляемым в список returner
, а не 4
.
Также (на основе ответа ccoakley) вы должны использовать возвращаемый массив из mergeSort()
, что можно легко сделать с помощью:
first = mergeSort(first);
second = mergeSort(second);
Вы можете посмотреть рабочий код (после изменений) здесь .