Дан массив х, элементы которого упорядочены по возрастанию. Для элемента р методом бинарного поиска проверить: если р входит в массив х, то found присвоить TRUE, а переменной к-номер элемента массива х, равного р; если р не входит в массив х, то found присвоить FALSE, а элемент р вставить в массив х, не нарушая порядок возрастания.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | procedure TForm1 . Button1Click(Sender: TObject);
var
x: array of integer ;
p: integer ;
found: boolean ;
nz,vh,k: integer ;
i,n: integer ;
begin
n:=memo1 . lines . count;
SetLength(x,n);
for i:= 0 to n- 1 do
x[i]:=strtoint(memo1 . Lines[i]);
p:=strtoint(edit1 . Text);
nz:= 1 ;
vh:=n- 1 ;
found:= false ;
while (nz<=vh) and ( not found) do
begin
i:=(nz+vh) div 2 ;
if x[i]=p then begin
found:= true ;
k:=i;
edit2 . text:=inttostr(k);
end
else
if x[i]<p
then
nz:=i+ 1
else
vh:=i- 1 ;
end ;
for i:=n downto vh do
x[i+ 1 ]:=x[i];
x[nz]:=p;
for i:= 0 to n do
memo2 . Lines . add(inttostr(x[i]));
end ;
end .
|