Как было отмечено выше, если никаких
дополнительных сведений о массиве, в котором хранятся данные, нет то
ускорить поиск нельзя. Если же заранее известна некоторая информация о
данный, среди которых ведется поиск, например,
массив данных отсортирован, удается существенно сократить время работы, применяя другие методы поиска.
Одним из методов поиска, более
эффективным, чем линейный, является бинарный ( двоичный ) поиск,
называемый также методом половинного деления. При его использовании на
каждом шаге область поиска сокращается вдвое.
program n8;const
n=10;var x,l,r,m,i:integer; f:boolean; a:array[1..n] of
integer;begin writeln('Введите исходный массив:'); for i:=1 to n do
read(a[i]); writeln('Введите x'); readln(x); l:=1; r:=n; f:=false;
while (l<=r)and not f do
begin
m:=(l+r) div 2;
if a[m]=x then f:=true else if a[m] end;
writeln('a[',m,']=',x,'=x');
end.
Программа этой же сортировки с использованием барьера.
program n9;const n=10;var x,l,r,m,i:integer; f:boolean; a:array[1..n] of integer;
begin
writeln('Введите исходный массив:');
for i:=1 to n do read(a[i]);
writeln('Введите x');
readln(x);
l:=1;
r:=n;
f:=false;
while (l<=r)and not f do
begin
m:=(l+r) div 2;
if a[m]=x then f:=true else if a[m] end;
writeln('a[',m,']=',x,'=x');
end.