Алгоритм сортировки выбором и оценка его эффективности

advertisement
Алгоритм сортировки выбором и оценка его эффективности
Сортировка представляет собой процесс упорядочения множества подобных
информационных объектов в порядке возрастания или убывания их значений.
Обычно сортировку подразделяют на два класса: внутреннюю и внешнюю. При
внутренней сортировке все элементы хранятся в оперативной памяти, таким образом, как
правило, это сортировка массивов. При внешней сортировке — элементы хранятся на
внешнем запоминающем устройстве, это сортировка файлов.
Одно из основных требований к методам сортировки — экономное использование
памяти. Это означает, что переупорядочение нужно выполнять «на том же месте», то есть
методы пересылки элементов из одного массива в другой не представляют интереса.
Удобной мерой эффективности является подсчет числа С — сравнений элементов и
М — присваиваний элементов. Достаточно хороший алгоритм затрачивает на сортировку
N элементов время порядка N×log2(N). Простейшие алгоритмы сортировки обладают
характеристикой порядка N2. Если N достаточно мало, то простые алгоритмы выгодно
использовать в силу простоты их реализации.
Имеется три способа сортировки массивов:



сортировка выбором;
сортировка обменом;
сортировка вставкой.
Рассмотрим алгоритм сортировки выбором для упорядочивания массива a[1..n]/
При сортировке выбором выбирается элемент с наименьшим значением и делается
его обмен с первым элементом массива. Затем находится элемент с наименьшим
значением из оставшихся n-1 элементов и делается его обмен со вторым элементом и т.д.
до обмена двух последних элементов. Например, если сортировку выбором применить для
массива "bdac", то будут получены следующие проходы:
исходное положение: b d a c;
первый проход:
a d b c;
второй проход:
a b b c;
третий проход:
a b c d.
Процедура, реализующая алгоритм сортировки выбором:
procedure sort(var a : mas; n : byte);
var i, j, min: byte; vsp : integer;
begin
for i := 1 to n - 1 do
begin
min:=i;
for j := i+1 to n do{найти элемент с наименьшим значением}
if a[j]<a[min] then min := j;
vsp:=a[i]; a[i]:=a[min]; a[min]:=vsp; {обмен}
end;
end;
Внешний цикл выполняется n-1 раз, а внутренний цикл выполняется n/2 раз. Это
значит, что число сравнений для сортировки выбором равно 1/2 (n2-n) и эта сортировка
будет выполняться слишком медленно для большого числа элементов.
Related documents
Download