Деление на ноль

Быстрая сортировка: интерактивная анимация (Quick Sort)

Опорный элемент делит массив на меньшие и большие, а каждую часть сортируем рекурсивно

Визуализация

Данные: Случайные
Данные:
Схема: Хоара
Схема:
Легенда цветов
не обработан опорный сравниваем меняем местами на своем месте
Нажмите "Пуск" или листайте по шагам.
Сравнения: 0 Обмены: 0 Глубина: 0 Шаг: 0 / 0 Сложность по времени: -

Как работает быстрая сортировка

Идея алгоритма. Быстрая сортировка следует стратегии "разделяй и властвуй". Один элемент участка объявляется опорным, а остальные переставляются так, чтобы слева от опорного оказались элементы не больше него, а справа - не меньше. Эта операция называется разбиением (partition). После нее опорный стоит на своем окончательном месте, а левую и правую части сортируем тем же способом рекурсивно, пока не дойдем до участков из одного элемента.

Сложность алгоритма

Сложность - это оценка того, как быстро растет потребление ресурса при росте длины массива n. Ресурса у алгоритма два, поэтому и оценки две: по времени и по памяти. Обе записывают через O-нотацию - у нас есть отдельная анимация о том, как читать такие записи.

По времени

Показывает, как растет число операций (здесь это сравнения и обмены) при росте n. Лейбл "Сложность" под визуализацией - время, которое получилось фактически на ваших данных.

Случай Время Комментарий
Лучший O(n log n) Опорный делит участок примерно пополам на каждом уровне
Средний O(n log n) На случайных данных разбиения в среднем сбалансированы
Худший O(n²) Разбиения однобокие: каждое откалывает лишь один элемент (схема Ломуто на отсортированных или равных данных)

По памяти

Показывает, сколько дополнительной памяти нужно алгоритму. Сам входной массив в эту оценку не входит: дополнительной считается память сверх него.

Характеристика Оценка Комментарий
Дополнительная память O(log n) Сортировка на месте: вспомогательный массив не нужен, память уходит только на стек рекурсии - в среднем log n, в худшем случае до n

Устойчивость алгоритма

Устойчивой называется сортировка, которая не меняет взаимный порядок равных элементов. Пример: сортируем учеников по оценке, а внутри одной оценки они уже стояли по алфавиту. Устойчивая сортировка сохранит алфавитный порядок внутри каждой оценки, неустойчивая - может перемешать.

Характеристика Оценка Комментарий
Устойчивость Нет Разбиение переставляет элементы через большие расстояния, поэтому равные элементы легко меняются местами и теряют исходный порядок

Примеры реализации быстрой сортировки (Quick Sort)

Ниже представлены реализации алгоритма с использованием обеих схем разбиения: Хоара (она работает в анимации по умолчанию) и Ломуто. Вы можете сравнить их реализацию на разных языках.

Хотите разобрать тему глубже? В нашем бесплатном курсе есть урок Сортировка Хоара - с подробной теорией, задачами и проверочными вопросами.