Объяснение того, почему ваш код дает результаты, которые вы видите.
Первый вызов recMultiMerge
имеет 6 очередей. left
будет первыми тремя ({3, 6, 9, 9, 100}, {1, 5, 9, 9, 12}, {5}
), а right
будет последними тремя ({}, {-5, -5}, {3402}
).
Затем вы выполните рекурсивный вызов с помощью left
. В этом вызове all.size()
будет 3. left
будет иметь одну очередь ({3, 6, 9, 9, 100}
), а right
также будет иметь только одну очередь ({1, 5, 9, 9, 12}
). (Я предполагаю, что второй параметр Vector.subList
- это счетчик.) Это остановится на втором, если потому что left.size() == 1
. Результатом будет эта первая очередь.
Теперь мы вернулись к первому рекурсивному вызову (потеряв 2-ю и 3-ю очереди), и мы снова запускаем рекурсивный вызов с помощью right
(который имеет 3 очереди в этом). Это будет продолжаться так же, как и последний вызов, возвращая первую очередь (которая в данном случае пуста) и теряет две другие.
Затем вы объединяете эти две очереди ({3, 6, 9, 9, 100}
и {}
), в результате чего в вашем ответе: {3, 6, 9, 9, 100}
.
Это обнаруживает две проблемы: неправильное разделение вектора с нечетным числом очередей в нем и слишком раннее завершение рекурсии (когда левая половина разбиения имеет только одну очередь в нем, даже если правая половина может быть не пустой).