> -- Александр Ильин писал(а):
> Получается, что поиск с использованием локальной процедуры выигрывает по всем статьям. В случае с включенной оптимизацией он в полтора раза быстрее двух вложенных WHILE (из-за вынужденных лишних IF-ов внутри, которые тормозят работу), и в три раза быстрее единственного WHILE. В случае с отключенной оптимизацией, то есть, когда всякие проверки индексов выполняются в полном объёме, он почти в три раза быстрее двух WHILE и в пять с половиной раз быстрее одного WHILE.Тестирование некорректно, как и анализ результатов.

1) В принципе вариант с процедурой не может быть эффективнее двух вложенных циклов (из-за накладных расходов на вызов процедуры). Максимум, чего можно добиться - оптимизирующий компилятор подставит процедуру inline, и будут те же два вложенных цикла.

2) В данном конкретном примере главную оптимизацию выполнил сам программист - а именно, сделал разновидность хака (которая в разных компиляторах может выглядеть совершенно по-разному, а то и не реализуема вообще) - во вложенном цикле работает не с двумерным массивом, а с одномерным (естественно, экономится умножение на каждом внутреннем цикле. Или, если компилятор это умеет, одно косвенное обращение к массиву ссылок на начала строк двумерного массива).

Вывод: применённый хак имеет мало отношения к алгоритмизации и программированию, а чисто основан на использовании фич конкретного компилятора конкретного языка.