# Solving and testing merge sort (part 5aed)

Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.

## Задача

Реализовать сортировку слиянием — устойчивый алгоритм с гарантированной сложностью O(n log n).

## Решение

```python
def merge_sort(arr: list[int]) -> list[int]:
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)


def merge(left: list[int], right: list[int]) -> list[int]:
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i]); i += 1
        else:
            result.append(right[j]); j += 1
    return result + left[i:] + right[j:]


print(merge_sort([5, 2, 4, 6, 1, 3]))
```

## Как это работает

Список делится пополам до кусков по одному элементу, затем соседние куски сливаются в отсортированные последовательности. Слияние двух отсортированных списков линейно.

## Пример работы

```text
[1, 2, 3, 4, 5, 6]
```

## Сложность

O(n log n) по времени всегда, O(n) по памяти.


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

**Читайте также:**

[последовательности](https://zvtprint.sk/nissan+skyline+wallpaper+4k+iphone?f=instapaper) · [Решение](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/factorial-razbor-mvdvvlcc.md) · [алгоритм](https://yakihonne.com/article/naddr1qvzqqqr4gupzp0dz8eu78sklq2grahrw7paqalanjrljdqzh4hpawxd0prhd3j8zqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknqep3x9jnvwfn94jnzd34956rxerx95uxxvny95ur2ctpvgmngc3cxdsnxgdhy46) · [затем](https://jaflysilve.freeflarum.com/d/3103-3103-dong-hua-av4us) · [проверка](https://blogfreely.net/catherine-vasilyev70/circle-k-franchise-careers) · [правках](https://riccitomas.wixsite.com/my-site-1/post/who-is-john-doe-in-roblox-forsaken-character-lore) · [работает](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/amc-k-t-rbanl-20f276.pdf) · [минимум](https://laurasimon573.overblog.fr/2026/10/scarlett-johansson-wallpaper-phone-hd-4k-for-iphone-android.html) · [случайной](https://rentry.co/bokep-indonesia-jilbab-terbaru-855532) · [кодом](https://hey.xyz/posts/2z28fyt5gc9yvkh61vf) · [отсортированные](https://rentry.co/gallery-348074) · [Слияние](https://drop.xtrafrancyz.net/selif/0gry1nke3h.pdf) · [всегда](https://ecency.com/@lukaskral2261/funnycams-9ec66e) · [сортировку](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/thaliagomex-901a01.pdf) · [result](https://jaflysilve.freeflarum.com/d/3099-3099-lily-xxx-leaks) · [добавлением](https://sway.cloud.microsoft/EmGpBJHPe4bSmJ5G) · [отсортированных](https://kappa.lol/YDlSKd) · [пополам](https://kappa.lol/XHeFlD) · [len(left](https://news-ctl-posts.hashnode.dev/common-mistakes-in-bracket-sequence-validation-part-f121) · [Проверка](https://kappa.lol/kelBHr) · [вызова](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [защищает](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/cherish-ams-fdcbec.pdf) · [list[int](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [right](https://paste2.org/GacCfN2A) · [элементу](https://statics.pancake.vn/web-media-264/fa/fc/b7/ef/888d37bb7349a94eebd848ee25102290d4847e271d868d8d477ff697.pdf) · [стиль](https://pen.absturztau.be/oz63a0cb/hnangopfrangchabaithy-khlipedd-liya-silver-duufrii-365-wan) · [времени](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [гарантированной](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/spankbot-6ab742.pdf) · [включая](https://rentry.co/undertaker-hd-wallpaper-824219)

