Добрый день,
в книге Н. Вирта "Алгоритмы и Структуры данных" нашел вот такой код :
Код:
T : ARRAY [0..N-1] OF String;
x : String;
....
L := 0; R := N;
WHILE L < N DO BEGIN
m := (L + R) div 2; i := 0;
WHILE (T[m, i] = x[i]) and (CHR(x[i]) <> #0) DO i := i + 1;
IF T[m, i] < x[i] THEN L := m + 1 ELSE R := m;
END;
IF R < N THEN BEGIN
i := 0;
WHILE (T[R, i] = x[i]) and (x[i] <> #0) DO i := i + 1;
END;
(* (R < N) and (T[R, i] = x[i]) фиксирует совпадение *)
Не могу понять с какой целью R присваивается значение N, если массив определен как
Код:
T : ARRAY [0..N-1] OF String;
Если положить
Код:
R := N - 1;
то программа будет работать в общем случае не хуже, а в лучшем случае на короче 1 проход цикла.
Или я что-то упустил?