Объединить 2 массива разной длинны без сортировки. При этом 3й массив должен идти по возрастанию

Смысл решения сводится к сравнению первых элементов массива. Полученный элемент мы вставляем в третий массив. Далее операция сравнения повторяется, но сравнение уже идет с первый элементов и нулевым.

Оба массива отсортированы по возрастанию, минимальный элемент всегда будет первым Вот что я наковырял...

public class Merge {

    public int[] merge(int[] left, int[] right) {
        int[] rsl = new int[left.length + right.length];
        int i = 0, j = 0, z = 0;
        while (i < left.length && j < right.length) {
            rsl[z++] = left[i] < right[j] ? left[i++] : right[j++];
        }

        return rsl;
    }

    public static void main(String[] args) {
        Merge process = new Merge();
        int[] rsl = process.merge(
                new int[] {1, 3, 5},
                new int[] {2, 4}
        );
        System.out.println(Arrays.toString(rsl));
    }
}

Проблема в том что у меня разные длины массивов, и получается , что как только первый или второй массив кончается , вё идёт по звезде... Думаю что ошибка где то в цикле while . Подскажите куда копать? Спасибо.


Ответы (1 шт):

Автор решения: Igor

Дело не в разных длинах массивов. Когда массивы одинаковой длины, будет та же проблема, так как один из массивов неизбежно закончится раньше, чем другой.

while (i < left.length && j < right.length) {
    rsl[z++] = left[i] < right[j] ? left[i++] : right[j++];
}
while (i < left.length) {
    rsl[z++] = left[i++];
}
while (j < right.length) {
    rsl[z++] = right[j++];
}
→ Ссылка