AFON // радиотехник affonya@mail.ru
← Все проекты Delphi

Бинарный поиск

Поиск элемента в отсортированном массиве делением пополам.

DP.21 · Алгоритмы

Задача

Найти индекс числа в отсортированном массиве.

Алгоритм

Диапазон поиска делится пополам: если середина меньше искомого — идём вправо, иначе влево.

Исходный код

⇩ Скачать 21-binarnyy-poisk.dpr

program BinarnyyPoisk;
{$mode delphi}{$apptype console}
var a: array[0..9] of Integer = (1, 3, 5, 7, 9, 11, 13, 15, 17, 19);
function Search(x: Integer): Integer;
var lo, hi, mid: Integer;
begin
  lo := 0; hi := High(a);
  while lo <= hi do begin
    mid := (lo + hi) div 2;
    if a[mid] = x then Exit(mid)
    else if a[mid] < x then lo := mid + 1
    else hi := mid - 1;
  end;
  Result := -1;
end;
var x, idx: Integer;
begin
  Write('Искать число: '); ReadLn(x);
  idx := Search(x);
  if idx >= 0 then WriteLn('Найдено, индекс ', idx) else WriteLn('Не найдено');
  ReadLn;
end.

Пояснения

Работает только на отсортированных данных, но даёт O(log n) вместо O(n).