Skip to main content

Command Palette

Search for a command to run...

Two ways to solve quicksort (part 21dc)

Updated
•2 min read•View as Markdown

Разберём решение и посмотрим, как та же задача решается другим способом.

Задача

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

Решение

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²) в худшем случае.

Альтернативный подход

Ту же задачу часто решают иначе: например, через рекурсию вместо цикла или через стандартную библиотеку вместо ручной реализации. Альтернатива обычно короче, но первое «ручное» решение лучше показывает механику работы алгоритма. Полезно написать оба и сравнить на одинаковых тестах.

Оба подхода рабочие; важно понимать цену каждого, а не копировать первый попавшийся.

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

pivot · задачу · [print(quicksort(3 · лучше · сортировку · тестах · первое · делится · написать · часто · рекурсию · способом · опорный · больше · Выбирается · python · обычно · посмотрим · элемент · рабочие · худшем · затем · меньше · Реализовать · равно · Задача · решение · библиотеку

More from this blog

N

News

3197 posts