Здравствуйте, ukrsonic, Вы писали:
...
алгоритм деления пополам — двоичный поиск в отсортированном массиве. позволяет снизить число сравнений до O(log(N)). Так как ищется номер билета в массиве a — надо сначала отсортировать массив a любым способом (не забывая что A(i) связано с P(i)). двоичный поиск в классическом варианте будет таким:
type
arr_i: array of integer;
function binary_search(a:arr_i;value:integer):integer;
var
l,r,x:cardinal;
begin
result := -1;
l:=low(a);
r:=high(a);
while l<r do
begin
x := (l+r) shr 1; // div 2
if a[x]=value then
begin
result := x;
break;
end
else if a[x]<value then l:=x+1;
else r:=x-1;
end;
while (result>0) and (a[result-1]=value) do dec(result);
end;
дальше что на си что на пхп будет примерно также как на дельфи. удачи.