Перейти к основному содержимому
Informatik.uz
Глава 1. Алгоритмы

Быстрая сортировка: метод «разделяй и властвуй»

Быстрая сортировка делит массив на две части вокруг опорного элемента и рекурсивно сортирует каждую. Разбираем её идею, реализацию на Python и преимущество перед сортировкой пузырьком.

Тема 4 из 11Чтение: 2 минОбновлено: 27 октября 2026 г.
Список тем (4 из 11)

Быстрая сортировка (quicksort) — алгоритм, основанный на принципе «разделяй и властвуй»: большая задача делится на малые, они решаются отдельно, а результаты объединяются. На первом шаге из массива выбирается опорный элемент. Остальные элементы разделяются на три группы: меньшие опорного, равные ему и большие.

Затем группы меньших и больших элементов сортируются тем же способом, то есть рекурсивно. Если часть состоит из одного элемента или пуста, она уже упорядочена — это условие остановки рекурсии. Краткая запись на Python: def qs(a): return a if len(a) <= 1 else qs([x for x in a if x < a[0]]) + [x for x in a if x == a[0]] + qs([x for x in a if x > a[0]]).

Пусть массив — 5 2 8 1 5, опорный элемент — 5. Меньшие: 2 1, равные: 5 5, большие: 8. Сортировка 2 1 даёт 1 2, итог — 1 2 5 5 8. Если опорный элемент делит массив примерно пополам, глубина рекурсии около log₂ n, а общий объём работы пропорционален n · log₂ n; для 1 000 000 элементов это порядка 20 миллионов операций вместо 500 миллиардов у сортировки пузырьком.

Худший случай быстрой сортировки — когда опорным каждый раз оказывается наименьший или наибольший элемент: тогда время приближается к n². Чтобы этого избежать, опорный элемент берут из середины или случайно. На практике для сортировки применяют готовую функцию Python sorted(), а быстрая сортировка — лучший пример для изучения идеи «разделяй и властвуй».

Главное

  • Быстрая сортировка делит массив вокруг опорного элемента на меньшие, равные и большие.
  • Меньшие и большие части сортируются тем же способом рекурсивно.
  • В среднем время пропорционально n · log₂ n — намного быстрее сортировки пузырьком.
  • В худшем случае (опорный каждый раз крайний элемент) время приближается к n².
  • На практике используют готовую функцию sorted().

Практические задания

  1. Отсортируйте вручную массив 4 9 1 7 4 3 быстрой сортировкой: на каждом шаге записывайте опорный элемент и группы меньших, равных и больших (опорный — первый элемент массива).
  2. Запишите приведённую функцию qs в файл и проверьте её на списке из 10 случайных чисел. Сравните результат с результатом sorted().
  3. Измените функцию так, чтобы сортировка шла по убыванию. Определите, какие условия нужно поменять местами, и проверьте программу.

Вопросы для закрепления

Проверьте себя: сначала подумайте, потом откройте ответ.

  1. 1Для чего в быстрой сортировке нужен опорный элемент?
    Относительно него элементы делятся на меньшие, равные и большие, и опорный элемент оказывается на своём месте.
  2. 2Когда быстрая сортировка работает медленнее всего?
    Когда опорным каждый раз оказывается наименьший или наибольший элемент: время приближается к n².

Пройдено тем: 0 из 11

Войти и отметить
Informatika 11-sinf darsligi muqovasi
В учебникеИнформатика — 11 класс