P
pro·school.ru
Каталог школ

Алгоритмы сортировки массива

💻 Информатика · 10 класс

Что такое сортировка

Сортировка — это упорядочение элементов массива по возрастанию или убыванию. Отсортированные данные легче анализировать: проще искать, находить медиану, выявлять повторы. Существует множество алгоритмов сортировки, и в школьном курсе разбирают простейшие: пузырьковую и сортировку выбором.

Сортировка пузырьком

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

for i in range(n-1):
for j in range(n-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]

Сортировка выбором

Идея: на каждом шаге находить минимальный элемент в неотсортированной части и ставить его на очередное место. После i-го шага первые i элементов уже на своих местах.

Сравнение алгоритмов

АлгоритмЧисло сравненийПерестановки
Пузырёкоколо n²/2много
Выбороколо n²/2не больше n-1

Оба алгоритма имеют сложность порядка : при росте размера массива вдвое время растёт примерно вчетверо. Для больших массивов применяют быстрые методы (быстрая сортировка, слиянием), но для понимания идеи учебные методы нагляднее.

Разбор шага

Пусть массив 5 1 4 2. Первый проход пузырьком: сравнили 5 и 1 — поменяли (1 5 4 2); 5 и 4 — поменяли (1 4 5 2); 5 и 2 — поменяли (1 4 2 5). Наибольший элемент 5 встал в конец. Дальше проходы повторяются для оставшейся части.

Обмен элементов

Ключевая операция любой сортировки — обмен двух значений местами. В языках без множественного присваивания для этого нужна временная переменная, иначе одно из значений потеряется:

vrem = a[j]
a[j] = a[j+1]
a[j+1] = vrem

В Python тот же обмен записывают короче: a[j], a[j+1] = a[j+1], a[j]. Понимание механизма обмена важно: ошибочная запись без временной переменной испортит данные.

Устойчивость и оптимизация

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

Частые ошибки. Неверная граница внутреннего цикла приводит к обращению за пределы массива. Забытый обмен через временную переменную (в языках без множественного присваивания). Лишние проходы, когда массив уже упорядочен — это решают флагом «были ли обмены».

Кратко о главном

  • Сортировка упорядочивает массив по возрастанию или убыванию.
  • Пузырёк меняет местами соседние элементы, выбор ищет минимум.
  • Оба простых метода имеют сложность порядка .
  • Для больших данных применяют быстрые алгоритмы сортировки.