Piszemy algorytm, który ma za zadanie połączyć ze sobą 2 posortowane tablice o różnej długości – do dzieła!

Ok, wygląda to tak:

let sortedArr1 = [1,2,4,6,8,9];
let sortedArr2 = [3,5,7,11];

console.log(merge2sorted(sortedArr1, sortedArr2));
//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 ]

Będziemy zatem musieli:

  • stworzyć wskaźniki i oraz j (ustawić na zero)
  • stworzyć pętlę while z warunkiem że i mniejsze niż długość pierwszej tablicy oraz j długość drugiej tablicy
  • wrzucać ten, który wskazuje mniejszą wartość i przesuwać o 1
  • po tym wszystkim jeżeli listy są różnej długości pozostaną nam w jednej z nich resztki do wrzucenia
  • sprawdzamy w której nam coś zostało (o ile w ogóle) i wrzucamy.

Wygląda to tak:

function merge2sorted(arr1, arr2){

    let i = 0;
    let j = 0;
    let merged = [];

    while(i < arr1.length && j < arr2.length){
            if(arr1[i] < arr2[j])
                merged.push(arr1[i++]);
            else 
                merged.push(arr2[j++]);     
    }

    if(i <arr1.length){
        while(i <arr1.length)
            merged.push(arr1[i++]);
    } 
    else if(j < arr2.length){
        while(j < arr2.length)
            merged.push(arr2[j++]);  
    }

    return merged;
}

console.log(merge2sorted([1,2,4], [3,5]));
//[ 1, 2, 3, 4, 5 ]

Przy okazji uczulam, internet jest pełen „genialnych” algorytmów o genialnym time i space complexity, które nie działają. Albo inaczej – działają pod tym przykładem, który prezentują. Czasem ChatGPT to pisze, czasem ludzie zatrudnieni w tych portalach piszą takie artykuły, czasami błędy przytrafiają się i w płatnych kursach, choć tutaj akurat tak źle nie jest.

Krótko mówiąc – albo wszystko sami sprawdzamy, długopis i kartka, albo wszystko sami rozumiemy, albo wszystko sami testujemy (nie na jednym przykładzie), albo chyba lepiej umieć mniej, ale porządnie, niż mieć mętlik w głowie. Sam nie wiem.