Пузырьковая сортировка вставками.


Это модификация обменного варианта сортировки. В этом методе входное и выходное множества находятся в одной последовательности, причем выходное - в начальной ее части. В исходном состоянии можно считать, что первый элемент последовательности уже принадлежит упорядоченному выходному множеству, остальная часть последовательности - неупорядоченное входное. Первый элемент входного множества примыкает к концу выходного множества. На каждом шаге сортировки происходит перераспределение последовательности: выходное множество увеличивается на один элемент, а входное - уменьшается. Это происходит за счет того, что первый элемент входного множества теперь считается последним элементом выходного. Затем выполняется просмотр выходного множества от конца к началу с перестановкой соседних элементов, которые не соответствуют критерию упорядоченности. Просмотр прекращается, когда прекращаются перестановки. Это приводит к тому, что последний элемент выходного множества "выплывает" на свое место в множестве. Поскольку при этом перестановка приводит к сдвигу нового в выходном множестве элемента на одну позицию влево, нет смысла всякий раз производить полный обмен между соседними элементами - достаточно сдвигать старый элемент вправо, а новый элемент записать в выходное множество, когда его место будет установлено. Именно так и построен программный пример пузырьковой сортировки вставками - 3.12.

{===== Программный пример 3.12 =====}

Procedure Sort (var a : Seq);

Var i, j, k, t : integer;

begin

for i:=2 to N do begin { перебор входного массива }

{*** вх.множество - [i..N], вых.множество - [1..i] }

t:=a[i]; { запоминается значение нового эл-та }

j:=i-1; {поиск места для эл-та в вых. множестве со сдвигом}

{ цикл закончится при достижении начала или, когда

будет встречен эл-т, меньший нового }

while (j >= 1) and (a[j] > t) do begin

a[j+1]:=a[j]; { все эл-ты, большие нового сдвигаются }

j:=j-1; { цикл от конца к началу выходного множества }

end;

a[j+1]:=t; { новый эл-т ставится на свое место }

end;

end;

Результаты трассировки программного примера 3.11 представлены в таблице 3.8.

Шаг Содержимое массива a
Исходный 48:43 90 39_ 9 56 40 41 75 72
43 48:90 39_ 9 56 40 41 75 72
43 48 90:39_ 9 56 40 41 75 72
39 43 48 90:_9 56 40 41 75 72
_9 39 43 48 90:56 40 41 75 72
_9 39 43 48 56 90:40 41 75 72
_9 39 40 43 48 56 90:41 75 72
_9 39 40 41 43 48 56 90:75 72
_9 39 40 41 43 48 56 75 90:72
Результат _9 39 40 41 43 48 56 72 75 90:

Таблица 3.8

Хотя обменные алгоритмы стратегии включения и позволяют сократить число сравнений при наличии некоторой исходной упорядоченности входного множества, значительное число пересылок существенно снижает эффективность этих алгоритмов. Поэтому алгоритмы включения целесообразно применять к связным структурам данных, когда операция перестановки элементов структуры требует не пересылки данных в памяти, а выполняется способом коррекции указателей (см. главу 5).

Еще одна группа включающих алгоритмов сортировки использует структуру дерева. Мы рекомендуем читателю повторно вернуться к рассмотрению этих алгоритмов после ознакомления с главой 6.



Дата добавления: 2016-07-22; просмотров: 1322;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.