-= DriveR =- писал(а):
но хотелось бы понять что вы сказали.Вот спрашивается, чего тут непонятного:
procedure THiAsmClass.doCalc;
var i,j,k,l:integer;
ss:string;
begin
ss := ToString(_Data);
_hi_CreateEvent(_Data, @onIs, ss);
i := 0; j := _Numb-1;
k := StrComp(pchar(_Arr[i]), pchar(ss));
l := StrComp(pchar(_Arr[j]), pchar(ss));
if (k=0)or(l=0) then exit;
if (k<0)and(l>0) then while (j-i)>1 do begin
k := (i+j) div 2;
l := StrComp(pchar(_Arr[k]), pchar(ss));
if l=0 then exit;
if l>0 then j := k
else i := k;
end;
_hi_CreateEvent(_Data, @onNo, ss);
end;
Каждое сравнение уменьшает область (между i и j) поиска слова в отсортированном массиве в ДВА РАЗА.
Поэтому, сколько надо сделать сравнений для массива в 1000 слов ??? Десять.
А для массива в 2000 слов -- одиннадцать.
А для массива в 4000 слов -- двенадцать.
И т.д.. Это и есть логарифмическая асимптотика.
А сколько надо сделать сравнений для массива в 1000 слов полным перебором ???
Разницу чувствуете, или как