Steps : integer; { для подсчета числа шагов поиска }
{ Процедура "пузырьковой" сортировки чисел в порядке возрастания }
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 { внутренний цикл }
if arg[j] > arg[j+1] then begin { обмен местами }
t:= arg[j]; arg[j]:= arg[j+1]; arg[j+1]:= t;
end;
end;
{ Функция последовательного поиска (Find Sequence) }
function FindSeq (aNum: integer): integer;
var i: integer;
begin
FindSeq:= -1; { если не найдем, результат будет -1 }
for i:=1 to CSize do begin
Steps:= Steps+1; { подсчет шагов поиска }
if aNum= ArrRand[i] then begin
FindSeq:= i; { нашли, возвращаем позицию }
Break; { выход из цикла }
end;
end;
end;
{ Функция двоичного поиска (Find Binary) }
function FindBin (aNum: integer): integer;
var L, M, R : integer;
begin
FindBin:= -1;
L:= 1; R:= CSize;
repeat
Steps:= Steps+1; { подсчет шагов поиска }
M:= (L+R) div 2;
if aNum= ArrSort[M] then begin
FindBin:= M; { нашли ! }
Break; { выход из цикла }
end;
if aNum > ArrSort[M]
then L:= M+1
else R:= M-1;
until L > R;
end;
{--- Главная программа ---}
Var i, n, p : integer; { вспомогательные переменные }
F: text; { файл результатов }
begin
Assign(F,'P_42_1.OUT'); Rewrite(F);
{ Заполняем массив случайными числами }
for i:=1 to CSize do ArrRand[i]:=1+Random(10000);