Sobes.tech
Назад к вопросам
Junior — Middle
67

Каким образом можно объединить две отсортированные последовательности так, чтобы результат оставался отсортированным?

Ответ от нейросети

sobes.tech AI

Чтобы объединить две отсортированные последовательности в одну отсортированную, можно использовать алгоритм слияния (merge), который работает за линейное время.

Идея:

  • Имеются два отсортированных массива или списка.
  • Используем два указателя, по одному на каждый массив.
  • Сравниваем текущие элементы, меньший добавляем в результат и сдвигаем соответствующий указатель.
  • Повторяем, пока не пройдем оба массива.

Пример на 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++
        }
    }
    // Добавляем оставшиеся элементы
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}