Skip to main content

Step-by-step: quicksort (part 7995)

Updated 2 min readMarkdown

Медленный разбор помогает понять код, а не просто скопировать его.

Задача

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

Решение

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

Разбор по шагам

  1. Шаг 1. Входные данные. Проверяем, что приходит в функцию, и какие значения считаются корректными.
  2. Шаг 2. Основной цикл. Именно здесь происходит вся работа; следим за изменениями переменных на каждой итерации.
  3. Шаг 3. Результат. Убеждаемся, что возвращаемое значение соответствует условию задачи, включая крайние случаи.

Когда каждый шаг понятен, доработка решения перестаёт быть лотереей.

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

Сложность · известных · работы · pivot · функцию · элемент · лотереей · считаются · Когда · Задача · самых · разделяй · следим · возвращаемое · значение · Проверяем · решения · просто · Результат · Именно · значения · quicksort(left · массив · быструю · [print(quicksort(3 · len(arr

No comments yet. Be the first to comment.

More from this blog