Представленную программу можно легко улучшить,
1 end;
end;
(*вывод отсортированного массива*) for i:=l to N do begin write(a[i], ' ');
end;
readln;
end.
Представленную программу можно легко улучшить, если учесть, что если после очередного прохода перестановок не было, то последовательность элементов уже упорядочена, т.е. продолжать проходы не имеет смысла. Читатель без труда сможет внести коррективы в программу, использовав логическую переменную, которая контролировала бы факт обмена.
Если чередовать направление последовательных просмотров, алгоритм улучшается. Такой алгоритм называют «шейкерной» сортировкой.
Программа 50
program sortirovka_7;
(*сортировка прямым обменом - шейкерная сортировка*) const N=5;
type item= integer;
var a: array[l..n] of item; i, j, k, L, R: integer; x: item;
begin (*задание искомого массива*)
for i:=l to N do begin write('введи элемент
a(',i,']=');
readln(a[i]);
end;
for i:=l to N do begin write(a[i],' end;
writeln;
(*алгоритм шейкерной сортировки*) L:=2; R:=n; k:=n;
repeat
for j:=R downto L do begin
if a[j-l]>a[j] then begin x:=a[j-l];a[j-l]:=a[j];
a(j]:=x; k:=j
end;
end;
L:=k+l;
for j:=L to R do begin
if a[j-l]>a[j] then begin x:=a(j-l];
a[j-l]:=a[j]; a[j]:=x; k:=j end;
end;
R:=k-l;
until L>R;
(*вывод отсортированного массива*)
for i:=l to N do
begin write(a[i],' ');
end; readln;
end.
Пузырьковая сортировка является не самой эффективной, особенно для последовательностей, у которых «всплывающие» элементы находятся в крайней правой стороне. В улучшенной (быстрой) пузырьковой сортировке предлагается производить перестановки на большие расстояния, причем двигаться с двух сторон. Идея алгоритма заключается в сравнении элементов, из которых один берется слева (i = 1), другой -справа (j = n). Если a[i] <= a[j] , то устанавливают j = j - 1 и проводят следующее сравнение. Далее уменьшают j до тех пор, пока a[i] > a[j]. В противном случае меняем их местами и устанавливаем i = i + 1. Увеличение i продолжаем до тех пор, пока не получим a[i] > a[j].
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий