Exploring quicksort (part 5f4a)
Предлагаю решить задачу вместе: без спешки, с объяснением каждой строки.
Задача
Реализовать быструю сортировку — один из самых известных алгоритмов «разделяй и властвуй».
Решение
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²) в худшем случае.
Это решение удобно как отправная точка для экспериментов: попробуйте изменить входные данные и проследить за поведением кода.
Читайте также:
алгоритмов · быструю · равно · склеиваются · отправная · middle · изменить · случае · Сложность · затем · len(arr · проследить · сортируются · Пример · quicksort(arr · точка · удобно · объяснением · опорный · Реализовать · [print(quicksort(3 · решить · элемент · python · разделяй · экспериментов
