Пошук уроків, статей та іншого контенту
Злийте два відсортовані масиви чисел в один відсортований масив.
Напишіть функцію solve(a, b), яка приймає два масиви чисел, відсортованих за зростанням, і повертає один новий відсортований масив, що містить усі елементи обох. Розв'яжіть без [...a, ...b].sort() — злийте масиви за один прохід, як у класичному алгоритмі merge sort.
Приклади
Вхід: [1, 3, 5], [2, 4, 6]
Вихід: [1, 2, 3, 4, 5, 6]
Вхід: [], [1, 2]
Вихід: [1, 2]
Вхід: [1, 1, 2], [1, 3]
Вихід: [1, 1, 1, 2, 3]
Ваше рішення
Підказки
Заведіть два вказівники — по одному на кожен масив — і порівнюйте елементи під ними, додаючи менший у результат.
Коли один із масивів закінчиться, залишок другого можна просто дописати в кінець результату.
function solve(a, b) {
const result = [];
let i = 0;
let j = 0;
while (i < a.length && j < b.length) {
if (a[i] <= b[j]) result.push(a[i++]);
else result.push(b[j++]);
}
while (i < a.length) result.push(a[i++]);
while (j < b.length) result.push(b[j++]);
return result;
}Два вказівники рухаються по обох масивах одночасно, щоразу додаючи менший з поточних елементів у результат; після того, як один масив вичерпано, залишок іншого дописується цілком — обидва масиви вже відсортовані, тож просто копіювання решти зберігає порядок.