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

реклама
Алгоритм сортировки вставками и оценка его эффективности
При сортировке вставкой сначала упорядочиваются два элемента массива. Затем
делается вставка третьего элемента в соответствующее место по отношению к первым
двум элементам. Затем делается вставка четвертого элемента в список из трех элементов.
Этот процесс повторяется до тех пор, пока все элементы не будут упорядочены.
Например, для массива "dcab" сортировка вставкой будет проходить следующим
образом:
исходное положение:
первый проход:
второй проход:
третий проход:
d
c
a
a
c
d
c
b
a
a
d
c
b;
b;
b;
d.
Процедура, реализующая алгоритм сортировки вставками:
procedure vstavka(var a : mas; n : byte);
var i, j: byte; vsp : integer;
begin
for i := 2 to n do
begin vsp:=a[i];
j:= i-1;
while (a[j]>vsp) and (j>1) do
begin
a[j+1]:=a[j];
j:=j-1
end;
if (a[j]>vsp) and (j=1)
then begin
a[2]:=a[1];
a[1]:= vsp
end
else a[j+1]:=vsp;
end
end;
В отличие от сортировки пузырьковым методом и сортировки выбором число
операций сравнения для сортировки вставкой зависит от исходной упорядоченности
массива элементов. Если исходный массив уже упорядочен, то число операций сравнения
равно n-1. Если массив упорядочен в обратном порядке, то число операций сравнения
равно 1/2 (n2 +n)-1,давая в среднем значение 1/4 (n2+n-2).
Число операций обмена будет следующим:



для лучшего случая: 2 (n-1);
в среднем: 1/4 (n2+9n-10);
для худшего случая: 1/2 (n2+3n-4).
Таким образом, число операций обмена для худшего случая будет столь же
большим, как и для сортировок пузырьковым методом и сортировок выбором. Число
операций обмена для среднего случая будет лишь на немного меньше. Однако сортировка
вставкой имеет два преимущества. Во-первых, она обладает естественным поведением,
т.е. она выполняется быстрее для упорядоченного массива и дольше всего выполняется,
когда массив упорядочен в обратном направлении. Это делает сортировку вставкой
полезной для упорядочения почти отсортированных массивов. Во-вторых, элементы с
одинаковыми ключами не переставляются: если список элементов сортируется с
использованием двух ключей, то после завершения сортировки вставкой он по-прежнему
будет упорядочен по двум ключам.
Несмотря на то, что число сравнений может быть довольно небольшим для
определенных наборов данных, постоянные сдвиги массива требуют выполнения
большого числа операций пересылок. Однако, сортировка вставкой имеет естественное
поведение, требуя наименьшее число операций обмена для почти упорядоченного списка
и наибольшее число операций обмена, когда массив упорядочен в обратном направлении.
Скачать