Sobes.tech
Junior — Middle

Kuidas saab kahe järjestatud jada ühendada nii, et tulemus jääks järjestatud?

sobes.tech AI

Vastus AI-lt

Et ühendada kaks sorteeritud järjestust üheks sorteeritud järjestuseks, saab kasutada ühendamise (merge) algoritmi, mis töötab lineaarse ajaga.

Idee:

  • On kaks sorteeritud massiivi või nimekirja.
  • Kasutame kahte näidikut, ühe iga massiivi jaoks.
  • Võrdleme praeguseid elemente, väiksem lisame tulemusse ja liigume vastava näidiku suunas edasi.
  • Korrame seda kuni mõlema massiivi läbimiseni.

Näide Kotlinis:

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++
        }
    }
    // Lisame ülejäänud elemendid
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}