Sobes.tech
Junior — Middle

Ako spojiť dve zoradené sekvencie tak, aby výsledok zostal zoradený?

sobes.tech AI

Odpoveď od AI

Na spojenie dvoch zoradených sekvencií do jednej zoradenej môžete použiť algoritmus zlučovania (merge), ktorý pracuje v lineárnom čase.

Idea:

  • Existujú dve zoradené pole alebo zoznamy.
  • Používame dva ukazovatele, jeden pre každý pole.
  • Porovnávame aktuálne prvky, menší pridávame do výsledku a posúvame príslušný ukazovateľ.
  • Opakujeme, kým neprejdeme obe pole.

Príklad v 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++
        }
    }
    // Pridáme zvyšné prvky
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}