# Solving and testing quicksort (part fe09)

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

## Задача

Реализовать быструю сортировку — один из самых известных алгоритмов «разделяй и властвуй».

## Решение

```python
def quicksort(arr: list[int]) -> list[int]:
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)


print(quicksort([3, 6, 8, 10, 1, 2, 1]))
```

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

Выбирается опорный элемент, массив делится на три части (меньше, равно, больше), затем части сортируются рекурсивно и склеиваются.

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

```text
[1, 1, 2, 3, 6, 8, 10]
```

## Сложность

O(n log n) в среднем, O(n²) в худшем случае.


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

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

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

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

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

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

[делится](https://writefreely.ethibox.fr/ozbb5198/hua-lian-er-ri-you) · [примерах](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [накроем](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [print(quicksort([3](https://discuss.tchncs.de/post/65444622) · [властвуй](https://jaflysilve.freeflarum.com/d/2820-2820-oblivion-rule-34-porn-fortnite-oblivion-hentai-gallery) · [рекурсивно](https://visuals11757.mataroa.blog/blog/9af-0f-50a/) · [известных](https://privatebin.devol.it/?35cb830bf93281be#9QjgmrCoYFJnrKcSK1eGtuU8AiXmaMhCFhR6v49JvVoz) · [Проверка](https://ecency.com/@marekbenes6828/post-23d730) · [arr[len(arr](https://rimworld.gallery/m/random/t/16310) · [массив](https://elenaroux735.overblog.fr/2026/10/muichiro-r34-comic.html) · [среднем](https://yakihonne.com/article/naddr1qvzqqqr4gupzqepahmscyvxcu2mhefclpmfydqc24k3xzxz4jg8ptm6l4rlk4v6cqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0ykkgwpcxqcnsv3k94jkzd3s956rvv3c94skvc3c95urwwtrxejkvwtp89nrqj0ctxq) · [python](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-b4c3e0.pdf) · [Такой](https://privatebin.devol.it/?e025061b5d5c3101#AoKtuM1Mb9DH2TKjxGaRjDykwUSVbdA5Vs1X56sKEpzK) · [самых](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-7db3b7.pdf) · [right](https://hey.xyz/posts/f9f23vb56ce58f6057) · [Пример](https://news-ctl-posts.hashnode.dev/step-by-step-the-sum-of-digits-part-da7d) · [ошибки](https://paste2.org/2LUIcy2f) · [Хорошая](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/miss-circle-x-miss-bloomie-r34-ca7a85.pdf) · [нескольких](https://drop.xtrafrancyz.net/selif/v2hezw22yi.pdf) · [затем](https://i-imagehost.com/solaraeesther-sf?f=linkcentre) · [крайние](https://gal39218.carrd.co/) · [проверять](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [сортировку](https://rainboweleven.com/grmo-095?f=linkcentre)

