Sobes.tech
Junior — Middle

Jak można połączyć dwie posortowane sekwencje tak, aby wynik pozostał posortowany?

sobes.tech AI

Odpowiedź od AI

Aby połączyć dwie posortowane sekwencje w jedną posortowaną, można użyć algorytmu scalania (merge), który działa w czasie liniowym.

Pomysł:

  • Istnieją dwa posortowane tablice lub listy.
  • Używamy dwóch wskaźników, po jednym na każdą tablicę.
  • Porównujemy aktualne elementy, mniejszy dodajemy do wyniku i przesuwamy odpowiedni wskaźnik.
  • Powtarzamy, aż przejdziemy przez obie tablice.

Przykład w Kotlin:

fun mergeSortedLists(a: List<Int>, b: List<Int>): List<Int> {
    val result = mutableListOf<Int>()
    var i = 0
    var j = 0
    while (i < a.size && j < b.size) {
        if (a[i] <= b[j]) {
            result.add(a[i])
            i++
        } else {
            result.add(b[j])
            j++
        }
    }
    // Dodajemy pozostałe elementy
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}