begin nstep := 0; {кол. шагов}
nswap := 0; {кол. перестановок}
for i := 0 to n - 2 do {кол. перестановок n-1}
begin {сравним элемент с последующим и меньший как пузырек всплывет,
то бишь поменяются элементы
или по другому: самый большой как тяжелый камень уйдет ко дну}
for j := 0 to n - 2 - i do {для каждого от начало до предпоследнего еще не обработанного}
begin Inc(nstep); {+1 к кол. шагов}
{если текущий элемент > элемента ниже, то утопить его (а легкий всплывает )
так в цикле топим этого до самого низа и самый последний на 1 проходе
цикла i и будет максимальным}
if mas[j] > mas[j + 1] then begin {обмен элементов}
tmp := mas[j];
mas[j] := mas[j + 1];
mas[j + 1] := tmp;
Inc(nswap); {+1 к кол. перестановок}
end;
end;
end;
{сообщаем о результате}
writeln(F, 'Cортировка массива методом пузырька');
writeln('Cортировка массива методом пузырька');
writeln(F, 'Количество шагов = ', nstep);
writeln('Количество шагов = ', nstep);
writeln(F, 'Количество перестановок = ', nswap);
writeln('Количество перестановок = ', nswap);
masissort := True; {массив отсортирован}
end;
{------------------------------------------------------------------------------}
{4-двоичный поиск элемента в массиве
(использует глобальные переменные F, mas, n, masissort)}
procedure FindBinEl();
var el: Integer; {какой элемент массива ищем}
i: Integer; {переменная цикла}
nstep: Integer; {кол. шагов}
find: Boolean; {было ли найдено}
y: Integer;
L, R, M: Integer;{отрезок отсортированного массива [L;R] и M - средняя точка}
begin writeln('Двоичный поиск элемента в массиве');
{если еще не был отсортирован массив, то предложить}