Сортировка выбором (Selection Sort)
Сортировка выбором - это простой алгоритм сортировки на месте. Он не очень эффективен для больших списков, но имеет свои преимущества:
- Прост в реализации.
- Хорошо работает для небольших наборов данных.
- Сортирует на месте, не требуя дополнительной памяти.
Содержание
Как это работает
Алгоритм сортировки выбором работает следующим образом:
- Найти минимальный элемент в неотсортированной части массива.
- Поменять местами этот минимальный элемент с первым элементом неотсортированной части.
- Повторять шаги 1 и 2 для оставшейся неотсортированной части массива.
Псевдокод
Вот псевдокод для алгоритма сортировки выбором:
``` for i = 0 to n-2 do
min_index = i for j = i+1 to n-1 do if arr[j] < arr[min_index] then min_index = j end if end for swap arr[i] and arr[min_index]
end for ```
Пример
Давайте рассмотрим пример сортировки массива `[64, 25, 12, 22, 11]` с использованием сортировки выбором:
- Первый проход:
- Минимальный элемент - `11`.
- Меняем местами `64` и `11`: `[11, 25, 12, 22, 64]`
- Второй проход:
- Минимальный элемент в `[25, 12, 22, 64]` - `12`.
- Меняем местами `25` и `12`: `[11, 12, 25, 22, 64]`
- Третий проход:
- Минимальный элемент в `[25, 22, 64]` - `22`.
- Меняем местами `25` и `22`: `[11, 12, 22, 25, 64]`
- Четвертый проход:
- Минимальный элемент в `[25, 64]` - `25`.
- Ничего не меняем, так как он уже на месте.
Массив отсортирован: `[11, 12, 22, 25, 64]`.
Временная сложность
Временная сложность сортировки выбором всегда $O(n^2)$, независимо от входных данных. Это делает ее неэффективной для больших наборов данных.
- Лучший случай: $O(n^2)$
- Средний случай: $O(n^2)$
- Худший случай: $O(n^2)$
Преимущества и недостатки
Преимущества:
- Простая реализация.
- Хорошо работает для небольших наборов данных.
- Сортирует на месте.
Недостатки:
- Неэффективна для больших наборов данных из-за квадратичной временной сложности.
- Выполняет много операций записи, что может быть нежелательно для флеш-памяти.
Когда использовать
Сортировку выбором можно использовать для небольших наборов данных или когда простота реализации важнее производительности. В большинстве случаев существуют более эффективные алгоритмы сортировки, такие как сортировка слиянием или быстрая сортировка, которые следует использовать для больших наборов данных.