Сортировка слиянием (merge sort)
Делит массив пополам, сортирует части и сливает их.
Сигнатура
O(n log n)Сортировка слиянием следует принципу «разделяй и властвуй»: массив делится пополам, каждая половина сортируется рекурсивно, затем две отсортированные части сливаются за линейное время. Даёт стабильную гарантию скорости.
Сложность: время O(n log n) во всех случаях. Память: O(n) под вспомогательный буфер. Устойчивая — сохраняет относительный порядок равных элементов.
def merge_sort(a):
if len(a) <= 1:
return a
mid = len(a) // 2
left = merge_sort(a[:mid])
right = merge_sort(a[mid:])
res, i, j = [], 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
res.append(left[i]); i += 1
else:
res.append(right[j]); j += 1
return res + left[i:] + right[j:]