Простейшие методы сортировки: метод выбора
Данный метод из группы простейших имеет лучшие характеристики по числу перестановок, хотя он, как и оба ранее рассмотренных метода, в целом имеет трудоемкость O(n2). Его чуть более лучшие показатели связаны с тем, что в некоторых ситуациях выполняется перестановка не соседних элементов, а отстоящих на некотором расстоянии друг от друга.
Пусть имеется n элементов а1 а2, а3, . . ., аn, расположенных в ячейках массива. Сортировка выполняется за (n–1) шаг, пронумерованных от 1 до n-1. На каждом i-ом шаге обрабатываемый набор разбивается на 2 части:
· левую часть образуют уже упорядоченные на предыдущих шагах элементы а1, а2, а3, . . ., аi-1
· правую часть образуют еще не обработанные элементы аi, аi+1, аi+2, . . ., аn
Суть метода состоит в том, что в необработанном наборе отыскивается наименьший элемент, который меняется местами с элементом аi. На первом шаге (при i = 1), когда необработанным является весь исходный набор, это сводится к поиску наименьшего элемента в массиве и обмену его с первым элементом. Ясно, что поиск наименьшего элемента выполняется обычным попарным сравнением, но соседние элементы при этом не переставляются, что в целом уменьшает число пересылок.
Пример. Возьмем тот же исходный набор целых чисел: 15-33-42-07-12-19
а1 | а2 | а3 | а4 | а5 | а6 | Выполняемые операции | |
шаг 1 | сравнение 15 и 33, min = 15 | ||||||
сравнение 15 и 42, min = 15 | |||||||
сравнение 15 и 07, min = 07 | |||||||
сравнение 07 и 12, min = 07 | |||||||
сравнение 07 и 19, min = 07, обмен 15 и 07 | |||||||
шаг 2 | сравнение 33 и 42, min = 33 | ||||||
сравнение 33 и 15, min = 15 | |||||||
сравнение 15 и 12, min = 12 | |||||||
сравнение 12 и 19, min = 12, обмен 33 и 12 | |||||||
шаг 3 | сравнение 42 и 15, min = 15 | ||||||
сравнение 15 и 33, min = 15 | |||||||
сравнение 15 и 19, min = 15, обмен 42 и 15 | |||||||
шаг 4 | сравнение 42 и 33, min = 33 | ||||||
сравнение 33 и 19, min = 19, обмен 42 и 19 | |||||||
шаг 5 | сравнение 33 и 42, min = 33, обмена нет, все готово |
В данном примере сделано 15 сравнений (как и в методе пузырька), но всего 4 перестановки. Эта особенность сохраняется и в целом: по числу сравнений метод выбора близок к методу пузырька, но по числу перестановок существенно превосходит оба рассмотренные выше методы (оценка числа перестановок n*log 2 n)
Особенности программной реализации. Внешний цикл обрабатывает основные шаги и выполняет перестановку минимального элемента, а внутренний организует поиск наименьшего элемента в необработанной части массива
fori := 1 to n–1 do
Begin
k := i; temp := a [i]; {устанавливаем начальный минимальный элемент}
for j := i+1 to n do
if a [j] < temp then
begin{изменяем текущий минимальный элемент}
k := j; temp := a [j];
end;
a [k] := a [i]; a [i] := temp;
end;
Общее заключение по простейшим методам сортировки.
Метод обмена (пузырька) имеет единственное преимущество – нулевое число пересылок в случае, если исходный набор уже отсортирован в нужном порядке. В остальных случаях все его показатели пропорциональны n2.
Метод вставок также дает хорошие результаты для упорядоченных входных данных (число сравнений и пересылок пропорционально n). Во всех остальных случаях его показатели пропорциональны n2, хотя что касается оценки среднего числа сравнений, то она чуть лучше, чем у других методов. Многочисленные эксперименты показывают, что метод вставок дает наименьшее время сортировки среди всех простейших методов.
Метод выбора, как это и следовало ожидать, имеет лучшие показатели по числу пересылок, особенно – для общего случая, где оценка О(n*log 2 n) заметно лучше оценки O(n2). Поэтому его можно рекомендовать к использованию из всех простейших методов в том случае, если именно число перестановок является наиболее важным.
Дата добавления: 2020-07-18; просмотров: 496;