Пишем решение с тестами: быстрая сортировка
Решение без тестов быстро ломается, поэтому добавим к задаче простые проверки.
Задача
Реализовать быструю сортировку — один из самых известных алгоритмов «разделяй и властвуй».
Решение
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]))
Как это работает
Выбирается опорный элемент, массив делится на три части (меньше, равно, больше), затем части сортируются рекурсивно и склеиваются.
Пример работы
[1, 1, 2, 3, 6, 8, 10]
Сложность
O(n log n) в среднем, O(n²) в худшем случае.
Проверка тестами
Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.
assert is_valid(True) is not None # базовая проверка вызова
assert is_valid(False) is not None # и второй случай
Такой минимум уже защищает от случайной ошибки при правках кода.
С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.
Related:
- nackt fotos von susu padotzke
- Два подхода: удаление дубликатов из списка
- 村上里沙
- Two ways to solve bracket sequence validation
- 1080p samurai wallpaper
- 중국섹스
- dendy world
- Типичные ошибки при решении: максимум и минимум списка
- brima-models
- 芃芃大人
- Рассматриваем задачу: проверка палиндрома
- kızı zorla yatağa bağlıyor
- анна витольдовна
- 麦乐迪马克思
- 1080p samurai wallpaper
- Разбираем задачу: бинарный поиск
- mms.bee
- meri babaian nude
- Частые ошибки при решении: быстрая сортировка
- Частые ошибки при решении: проверка анаграмм
- Carolina Cazadora trío en baño de discoteca - ForoCoches
- Медленно и подробно: сортировка слиянием