«Шейкерная» сортировка. При рассмотрении сортировки «методом пузырька», Вы очевидно заметили, что элемент с минимальным значение достигает своего положения за один проход, тогда как элемент с максимальным значением, в общем случае, достигает своего положения только в конце работы алгоритма.
Попробуем после каждого прохода изменять направление просмотра, т.е. если вели просмотр с начала массива и определяли минимальный элемент, то просмотр надо вести с предпоследнего неотсортированного элемента к началу массива, при этом выбирать максимальный элемент.
Такая сортировка называется «Шейкерной»(челночной).
procedure Shaker(var item: DataArray; count:integer);
var
j, k, l, r: integer;
x: DataItem;
begin
l := 2; r := count; k := count;
repeat
for j := r downto l do
if item[j-1] then
begin { обмен }
x := item[j-1];
item[j-1] := item[j];
item[j] := x;
k := j;
end;
l := k+1;
for j := l to r do
if item[j-1]>item[j] then
begin { обмен }
x := item[j-1];
item[j-1] := item[j];
item[j] := x;
k := j;
end;
r := k-1;
until l>r
end; { конец челночной сортировки }
Задание
Используя процедуру Bubble написать программу SortB сортировки массива целых чисел. Числа считываются из файла подготовленного программой.
Модернизировать программу сортировки используя подпрограмму Bubble1. провести трассировку программы SortB1. Сравнить с работой программы SortB.
Внести изменения в подпрограмму Shaker для уменьшения ненужных просмотров массива.
Написать программу SortSH использующей метод «Шейкерной» сортировки.
Достарыңызбен бөлісу: |