Читаем Песни о Паскале полностью

Что ж, дело нехитрое, сейчас посчитаем, – перед вами программа для наших опытов («P_43_3»). Количество сравнений и перестановок будем накапливать в переменных C1 и C2. Обратите внимание на их тип – EXTENDED, – это переменные действительного типа. Почему не длинное целое? При сортировке больших массивов может потребоваться столь много операций, что не хватит целочисленной переменной, – она переполнится, «лопнет», и результат исказится. Потому выбран тип EXTENDED.

Далее в программе следуют знакомые вам процедуры сортировки, – это наши «спортсмены». В их тела «вживлены» дополнительные операторы для подсчета сравнений (C1) и перестановок (C2), – они выделены курсивом. Наконец, главная программа, – она вызывает по очереди каждую из процедур и печатает количество сравнений и перестановок. Здесь равные условия для соревнующихся создаются загодя сформированным случайным массивом Arr0, который копируется в массив Arr перед каждой сортировкой.

Вам осталось лишь задать размер массива константой CSize, скомпилировать и запустить программу.


{ P_43_3 – Сравнение алгоритмов сортировки }

const CSize=100; { размер массивов }


type TNumbers = array [1..CSize] of Integer;

var Arr0 : TNumbers; { несортированный массив-заготовка }

      Arr : TNumbers; { сортируемый массив }

      C1, C2 : extended; { счетчики сравнений и перестановок }


{ BubbleSort "пузырьковая" сортировка }

procedure BubbleSort(var arg: TNumbers);

var i, j, t: Integer;

begin

      for i:= 1 to CSize-1 do

      for j:= 1 to CSize-i do begin

      C1:=C1+1; { подсчет сравнений }

      if arg[j] > arg[j+1] then begin

      C2:=C2+1; { подсчет перестановок }

      t:= arg[j]; arg[j]:= arg[j+1]; arg[j+1]:= t;

      end;

      end;

end;


{ FarmSort – «Фермерская» сортировка }

procedure FarmSort(var arg: TNumbers);

var L, R, T: Integer;

begin

      for L := 1 to CSize-1 do

      for R := CSize downto L+1 do begin

      C1:=C1+1; { подсчет сравнений }

      if arg[L] > arg[R] then begin

      C2:=C2+1; { подсчет перестановок }

      T:= arg[L]; arg[L]:= arg[R]; arg[R]:= T;

      end;

      end;

end;

      { QuickSort – Быстрая сортировка }

procedure QuickSort(var arg: TNumbers; aL, aR: Integer);

var

L, R, Mid, T: Integer;

begin

L:= aL; R:= aR;

Mid:= (arg[L] + arg[(L + R) div 2] + arg[R]) div 3;

repeat

      while arg[L] < Mid do begin L:=L+1; C1:=C1+1 end;

      while arg[R] > Mid do begin R:=R-1; C1:=C1+1 end;

      if L <= R then begin

      if arg[L]>arg[R] then begin

      C2:=C2+1; { подсчет перестановок }

      t:= arg[L]; arg[L]:= arg[R]; arg[R]:= t;

      end;

      L:=L+1; R:=R-1;

      end;

      until L > R;

      if R > aL then QuickSort(arg, aL, R);

      if L < aR then QuickSort(arg, L, aR);

end;

const CFName = 'P_43_3.out';


var i: integer;

F: text;

begin

Assign(F,CFName); Rewrite(F);

for i:=1 to CSize do Arr0[i]:=1+Random(10000);

Writeln(F, 'Размер массива = ', CSize);

Writeln(F, 'Алгоритм       Количество Количество');

Writeln(F, 'сортировки сравнений перестановок');

C1:=0; C2:=0;       { очистить счетчики }

Arr:= Arr0;       { заполнить сортируемый массив }

BubbleSort(Arr);

Writeln(F, 'Пузырьковая:', C1:12:0, C2:12:0);

C1:=0; C2:=0;       { очистить счетчики }

Arr:= Arr0;       { заполнить сортируемый массив }

FarmSort(Arr);

Writeln(F, 'Фермерская :', C1:12:0, C2:12:0);

Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы