# Solving and testing merge sort

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

## Задача

Реализовать сортировку слиянием — устойчивый алгоритм с гарантированной сложностью 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://privatebin.devol.it/?f045fe5a6c53e9c8#bkuM6NggwWEhmURQna9GR8yor7FQNsngnqDRaTSbnQt) · [линейно](https://secure.linkcentre.com/status/1737938/?from=submit) · [элементу](https://blogfreely.net/catherine-vasilyev70/ye-yi-she-sao-mao-m) · [случай](https://ink.synkosmos.org/oz2337b6/liseli-turbanli-porno-arap-guzellik-turk-ifsa-videosu) · [глазами](https://articlescad.com/braden-sherota-gay-417687.html) · [одному](https://dev.to/devnote2319/account-pools-for-multi-platform-posting-168el-1d7i) · [left[i](https://rentry.org/semidraws-demon-slayer-533821) · [слиянием](https://secure.linkcentre.com/status/1737792/?from=submit) · [while](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/eliena-cfe626.pdf) · [result](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-xnj6q-4bf2) · [работает](https://discuss.tchncs.de/post/65441081) · [списков](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/merve-damla-ifsa-59ba40.pdf) · [Сложность](https://sway.cloud.microsoft/hK3IWKMHw0lvASF0) · [merge(left](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-owga6-4o5l) · [проверять](https://milhench.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/petit-tigre-onlyfan-0ec280.pdf) · [задачу](https://ink.synkosmos.org/ozbbfb7d/czech-streets-e138-horny-pe-teacher-public-sex-in-prague) · [последовательности](https://dev.to/devnote2319/account-pools-for-multi-platform-posting-ljc1x-2dpe) · [Пример](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/event-acc592.pdf) · [вызова](https://paper.wf/clara1987log/nan-ju-zi-da-shen-tai-wan-avnu-xing-ju-zi-xing-gan-xie-zhen-ji) · [случаи](https://paper.wf/sofia1967log/nudecollect) · [Посмотрим](https://elenaleroy211.overblog.fr/2026/11/post-2.html) · [корректности](https://news-ctl-posts.hashnode.dev/two-approaches-to-anagram-checking-mw4i5j3m) · [становится](https://dev.to/devnote2319/keeping-link-blocks-stable-across-platforms-u4eln-217b) · [проверок](https://ymcatexasyg.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/cherryjambaby-a4401a.pdf) · [включая](https://milhench.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/gia-armani-leak-b2ab9a.pdf) · [сразу](https://nikolaylindberg50.wixsite.com/my-site-1/post/cild-pussy) · [сложностью](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/alizade-ifsa-097098.pdf) · [устойчивый](https://dev.to/devnote2319/idempotent-publishing-jobs-oujtx-5dao) · [Список](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-sjke6-2iip)

