Внимание! Практически весь материал этой лекции был в видеолекции. Если вы всё хорошо усвоили, просто пробегитесь глазами и переходите дальше.
Этот алгоритм — рекурсивный, он разбивает одну большую задачу сортировки на подзадачи, выполнение которых делают его ближе к решению изначальной большой задачи.
Основная идея — разделение неотсортированного массива на две части и сортировка отдельных половинок по рекурсивному принципу.

Допустим, у нас есть n
элементов для сортировки. Если n < 2
, заканчиваем сортировку, иначе — сортируем отдельно левую и правую части массива, и потом их объединяем.
Давайте отсортируем массив

Делим его на две части, и продолжаем делить, пока не получим подмассивы величиной 1, которые заведомо отсортированы.

Два отсортированных подмассива можно объединить за время O(n)
с помощью простого алгоритма: удаляем меньшее из чисел в начале каждого подмассива и вставляем его в объединенный массив. Повторяем, пока не закончатся все элементы.


Сортировка слиянием требует времени O(nlog n)
для всех случаев. Пока мы делим массивы на половины, на каждом уровне рекурсии получаем log n. Затем, для слияния подмассивов нужно всего n сравнений. Следовательно, O(nlog n)
. Лучший и худший варианты для сортировки слиянием — одинаковы, ожидаемое время работы алгоритма = Θ(nlog n)
.
Этот алгоритм — самый эффективный среди рассмотренных.


ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ