Двоичный(бинарный) поиск

Оригинал статьи: http://www.cyberforum.ru/pascal/thread133142.html
Благодарен всем авторам, которые внесли свой вклад в сборку кода

Исчем номер заданного элемента в упорядоченном по возрастанию массиве.

 
 var
  n, v, i, r: integer;
  a: array[1..1000] of integer;

procedure binsearch(left, right: integer);
begin
  if left = right then
  begin
    r := right;
    exit;
  end;
  
  r := (right + left) div 2;
  if a[r] < v then
  begin
    left := r + 1;
    binsearch(left, right)
  end
   else
  begin
    right := r;
    binsearch(left, right);
  end;
end;

begin
  readln(n);
  for i := 1 to n do
    read(a[i]);
  readln(v);
  binsearch(1, n);
  if a[r] = v then
    writeln(r)
  else
    writeln('Absent');
end.
  

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии