# Solving and testing merge sort (part 9163)

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

## Задача

Реализовать сортировку слиянием — устойчивый алгоритм с гарантированной сложностью 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://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [случаи](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [второй](https://mumbaites.com/gracie+bon+nude?f=linkcentre) · [устойчивый](https://rentry.co/9ua36hsc) · [убеждаемся](https://privatebin.devol.it/?b033725d7debfb9e#FBLjNeXTAsQynoQLdgSHuKpYg4EXZPHBAjVkCUvXD3am) · [Слияние](https://rentry.co/kiran-rathod-nude-boobs-689477) · [случайной](https://news-ctl-posts.hashnode.dev/a-step-by-step-look-at-primality-testing-part-67f7) · [отсортированных](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/scute438-f6e2a2.pdf) · [ошибки](https://articlescad.com/carolina-dreher-nude-382883.html) · [решение](https://drop.xtrafrancyz.net/selif/2so43mtube.pdf) · [проверок](https://ecency.com/@marekkral2859/fkk-boys-baikal-2cd0a2) · [Проверка](https://articlescad.com/hidden-bath-cam-voyeur-spy-videos-of-girls-bathing-382897.html) · [списков](https://news-ctl-posts.hashnode.dev/two-approaches-to-computing-an-average-part-b3cd) · [merge(left](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [python](https://paste2.org/Gt3fK9j1) · [сначала](https://zvtprint.sk/join/Swr+Tyz+%60rby?f=instapaper) · [делится](https://github.com/ozalopa956-cloud/text-normalize-py/issues/8) · [базовая](https://radicle.network/nodes/seed.pipapo.org/rad%3AzAC5wUHJXq3383EbbobxaYfVHfLC/issues/73c253f5a4eeaa4642416de7fdd9f3a040d5e8c2) · [сразу](https://rentry.co/fidan-atalay-if-a-663372) · [задачу](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/valerygrey-porn-025ce4.pdf) · [Задача](https://exhibit48147.mataroa.blog/blog/e65-87-723/) · [линейно](https://articlescad.com/emily-louise-pelada-382828.html) · [result](https://jaflysilve.freeflarum.com/d/2443-2443-professora-cibelly-ferreira-transando) · [нескольких](https://ownforum.freeflarum.com/d/5258-5258) · [становится](https://aton-center.org/sks+sHq+mtrjm?f=linkcentre) · [len(left](https://frames55056.mataroa.blog/blog/marti-marti-98/) · [добавлением](https://ecency.com/@jakubkolar5653/nini-divine-face-sexy-photos-of-the-french-amateur-pawg-46365c)

