# Writing tests for bubble sort (part b1ba)

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

## Задача

Отсортировать список чисел по возрастанию простейшим алгоритмом — сортировкой пузырьком.

## Решение

```python
def bubble_sort(arr: list[int]) -> list[int]:
    a = arr[:]
    n = len(a)
    for i in range(n):
        for j in range(n - 1 - i):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]
    return a


print(bubble_sort([5, 1, 4, 2, 8]))
```

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

На каждом проходе самое большое из оставшихся элементов «всплывает» в конец. Внутренний цикл сокращается на `i`, ведь хвост уже отсортирован.

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

```text
[1, 2, 4, 5, 8]
```

## Сложность

O(n²) по времени, O(1) по памяти (без учёта копии).


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

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

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

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

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

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

[list[int](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/gcd-razbor-mvcx8tty.md) · [случай](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [удобны](https://discuss.tchncs.de/post/65441486) · [сокращается](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/mandy-x-chester-r34-6e8934.pdf) · [return](https://shattalarab.net/kjanecaron?f=instapaper) · [убеждаемся](https://ecency.com/@jirikral2369/cielitobebe-videos-y-fotos-filtradas-de-onlyfans-8fef87) · [отсортирован](https://ninsheetmusic.net/chattwi?f=linkcentre) · [случаи](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [задач](https://statics.pancake.vn/web-media-264/26/e2/3e/43/fc101e81869e29ac186f3ae48f3569c8939af00ff79b4bfee40366c8.pdf) · [Сложность](https://statics.pancake.vn/web-media-264/ab/c7/73/51/75d7a619c6c7baf2dcc960365fc38e3b287bb27794bebcfa13a4ee6d.pdf) · [учебных](https://laurafournier471.overblog.fr/2026/10/57.html) · [второй](https://blogfreely.net/nathannazarov26/maxao-te-zhi-mu) · [фреймворков](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/twitter-sakso-d53b87.pdf) · [решение](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/noshkaneokyla-91ad6f.pdf) · [крайние](https://wuchu-pub.com/uploads/20261018/51cc2eaa125fc041eeda38cdf7187d32.pdf) · [памяти](https://adultgallery.win/anya+dasha+naked?f=instapaper) · [assert](https://privatebin.devol.it/?264f37cc8a5e1d30#4jK2vf3rM2mgqZ1ARULrqHpVgTsxvMB7whuxcSQWjpX1) · [сначала](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [простейшим](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-d8df9b.pdf) · [конец](https://gal17261.carrd.co/) · [алгоритмом](https://ecency.com/@jannovotny8793/solodusk-r34-9d614f)

