Image

Сравнение алгоритмов сортировки на Python с Pygame-визуализацией

Когда объясняешь школьникам или студентам, как работает сортировка, графика говорит громче слов. Наверняка, в интернете полно обзоров и сравнительных анализов различных алгоритмов сортировки, но я не нашел ничего что объединяло бы самые популярные алгоритмы в одном сравнительном экстазе. Поэтому я написал визуализатор, который показывает в реальном времени, как разные алгоритмы сортируют один и тот же массив — одновременно.

Зачем нужен визуализатор

Когда мы говорим о «скорости сортировки», большинство представляет себе просто числа и асимптотику O(n log n).
Но если вы хоть раз увидите, как пузырьковая сортировка «ползёт» по массиву, а QuickSort разлетается молнией, — асимптотика станет куда понятнее.

Так появилась идея: сделать наглядную, динамическую визуализацию, где все алгоритмы сортируют одни и те же данные параллельно.

Что делает программа

Программа строит окно Pygame, разбитое на несколько панелей (по одной на каждый алгоритм).
На каждой панели — набор прямоугольных столбиков, представляющих элементы массива.
Высота — значение, цвет — алгоритм.

  • Визуализация 10 алгоритмов сортировки одновременно

  • Пошаговая анимация — видно каждый обмен элементов

  • Реальное сравнение скорости и динамики алгоритмов

  • Управление в реальном времени (пауза, перезапуск, скорость)

  • Полностью на чистом Python, без внешних зависимостей кроме pygame

Во время работы:

  • Все алгоритмы запускаются на одной и той же случайной выборке чисел.

  • Каждый шаг сортировки отрисовывается в реальном времени.

  • Можно ставить на паузу, перезапускать с новой выборкой, или наблюдать завершение каждого метода.

Поддерживаемые алгоритмы

Визуализатор реализует все классические алгоритмы сортировки на Python (через генераторы):

Категория

Алгоритмы

Простые

Bubble, Selection, Insertion

Быстрые

Quick, Merge, Heap

Гибридные

Shell, Comb, Gnome

Реальные

TimSort (как в Python)

Каждый алгоритм реализован как генератор, который yield-ит текущее состояние массива.
Это позволяет синхронно отрисовывать прогресс и наблюдать шаг за шагом.

Чуть более подробно про каждый из алгоритмов

1. Bubble Sort (пузырьковая сортировка)

  • Тип: простая, учебная

  • Сложность: O(n²)

  • Принцип: последовательно «всплывает» максимальный элемент в конец массива, сравнивая соседние пары.

  • Особенности: крайне медленная, но идеальна для демонстрации.

2. Selection Sort (сортировка выбором)

  • Тип: простая, сравнительная

  • Сложность: O(n²)

  • Принцип: находит минимум из оставшейся части и ставит его на текущее место.

  • Особенности: делает минимум обменов, но остаётся медленной.

3. Insertion Sort (сортировка вставками)

  • Тип: простая, адаптивная

  • Сложность: O(n²) в худшем, O(n) в лучшем

  • Принцип: вставляет каждый элемент на своё место в уже отсортированной части.

  • Особенности: быстра для почти отсортированных массивов.

4. Merge Sort (сортировка слиянием)

  • Тип: рекурсивная, стабильная

  • Сложность: O(n log n)

  • Принцип: делит массив пополам, сортирует рекурсивно, потом сливает.

  • Особенности: стабильная, требует доп. памяти (O(n)).

5. Quick Sort (быстрая сортировка)

  • Тип: рекурсивная, сравнительная

  • Сложность: O(n log n) в среднем, O(n²) в худшем

  • Принцип: выбирает опорный элемент, разделяет массив на меньшие/большие.

  • Особенности: самая быстрая в среднем, не стабильная.

6. Heap Sort (пирамидальная сортировка)

  • Тип: сравнительная, не рекурсивная

  • Сложность: O(n log n)

  • Принцип: строит двоичную кучу и последовательно извлекает максимум.

  • Особенности: не требует доп. памяти, всегда предсказуемая скорость.

7. Shell Sort (сортировка Шелла)

  • Тип: улучшение вставок

  • Сложность: от O(n log² n) до O(n^(3/2)), в зависимости от шага

  • Принцип: сортирует элементы через определённые промежутки (gap), постепенно уменьшая gap.

  • Особенности: часто используется для больших почти-отсортированных массивов.

8. Comb Sort (расчёстка)

  • Тип: улучшение пузырьковой

  • Сложность: O(n²) (на практике быстрее Bubble)

  • Принцип: похожа на пузырьковую, но сравнивает элементы через уменьшающийся «зазор».

  • Особенности: быстрее пузырьковой, простой код.

9. Gnome Sort (садовая сортировка)

  • Тип: экзотическая вариация вставок

  • Сложность: O(n²)

  • Принцип: похожа на сортировку вставками, но с интуитивным «шагом назад» при обмене.

  • Особенности: визуально интересная, «шагает» по массиву, как гном с цветами 🌼

10. TimSort

  • Тип: гибрид Merge + Insertion

  • Сложность: O(n log n)

  • Принцип: делит массив на небольшие блоки (runs), сортирует вставками и сливает.

  • Особенности: используется в Python (list.sort, sorted) и Java — один из лучших реальных алгоритмов сортировки.

Техническая реализация

Основная идея

Главная структура — это словарь генераторов:

generators = {name: func(list(arr)) for name, func in ALGORITHMS.items()} arrays = {name: list(arr) for name in ALGORITHMS.keys()}

Каждый кадр цикла main() вызывает:

state = next(gen) arrays[name] = state

и сразу же перерисовывает панели.

Интерфейс

  • ESC — выход

  • SPACE — пауза / продолжение

  • R — перезапустить с новой случайной выборкой

Экран делится на сетку cols × rows, каждая ячейка отображает один алгоритм.
Пример при 10 алгоритмах — сетка 5×2.

Пример визуализации

На скриншоте видно, как пузырьковая сортировка отстаёт от QuickSort и HeapSort; Merge и TimSort идут синхронно, но более плавно
На скриншоте видно, как пузырьковая сортировка отстаёт от QuickSort и HeapSort; Merge и TimSort идут синхронно, но более плавно
  • Pygame обеспечивает стабильный FPS (60 кадров/с) и простое управление окнами.

  • Все сортировки написаны на чистом Python — без NumPy.

  • Генераторы позволяют элегантно «пошагово» наблюдать процесс.

  • Для каждого алгоритма сохраняется отдельная копия массива, чтобы стартовые условия были одинаковыми.

Результат и выводы

Разумеется, результат абсолютно предсказуемый, но мною преследовалась цель повысить наглядность при сравнении скорости сортировки раличных алгоритмов:

  • Пузырьковая сортировка — самая медленная (как и ожидалось).

  • QuickSort и HeapSort лидируют.

  • MergeSort стабильно быстра, но требует больше движений.

  • TimSort показывает плавное, оптимизированное поведение, почти как в реальной сортировке Python.

Можно было бы добавить еще алгоритмы RadixSort, CountingSort, BucketSort, но, как по мне, они слишком специфичны по отношению к сортируемым данным.

Этот проект — отличный пример, как можно совместить:

  • классическую алгоритмическую теорию,

  • простую визуализацию на Python,

  • и интерактивное обучение.

Полезно для школьников, студентов и просто тех, кто любит видеть, как алгоритмы оживают, визуалов и просто фанатов инфографики 🙂

Ну и, как полагается, исходный код доступен на GitHub

На вики можно почитать про каждый алгоритм более подробно

Источник: habr.com

✅ Найденные теги: новости, Сравнение

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых