Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
// бинарный поиск, который ищет не только элемент, но и границу снизу.
L=0;R=N;
if (T<a[0]) //во многих случаях априори известно, что a[0]<=T и это можно опустить
{
lindex=-1;
found=false;
return;
}
// invariant: a[L]<=T<a[R] где a[N]=бесконечность
// реального обращения к a[N] нет.
while (R-L>1)
{
M=(R+L)/2;// если массивы не длиннее миллиарда элементов
if (T<a[M])
{
R=M;
}else //a[M]<=T
{
L=M;
}
}
lindex=L;
found=a[L]==T;
L:=0;R:=N;
WHILE L < R DO
m:=(L+R) DIV 2;
IF a[m] < T THEN
L := m+1
ELSE
R := m
END
END
Как же все-таки правильно написать двоичный поиск?