sz писал(а):Неправильно. Пробежка по массиву - это последовательный доступ к данным. Происходит очень быстро - прямо в кеше процессора.
А проверка на прерывание - это, как минимум одна потеря бранча. Практически всегда медленнее. Ну, при разумных размерах массива, разумеется.
Допустим, массив из N элементов только с ОДНИМ нулём в произвольном элементе (напоминаю, в оригинальной задаче нулей может быть несколько - хоть весь массив из нулей).
Способ #1: пробежать весь массив, скажем, перемножая элементы, и результат сравнить с нулём. Время на работу с одним элементом - t1. Время на выполнение ВСЕГДА - N*t1.
Способ #2: loop с выходом, если элемент равен нулю. Время на работу с одним элементом - t2. Какое, в среднем, время мы потратим на поиск нуля в произвольном элементе? На вскидку, N(1 + N)*t2/2N =~ N*t2/2.
Вывод: Если я не ошибся, пробег всего массива выгоден только если t1 < t2/2. Какая, из удовлетворяющих условию задачи, операция с элементом будет в два раза быстрее, чем сравнение с нулём? Умножение? Деление? Сравнение двух произвольных чисел? Я деталей того, как процессоры работают не знаю, но задача, как я понимаю, ЛОГИЧЕСКАЯ - произвольный процессор, произвольный компилятор. sz, Вы в процессорах "шарите"

, серьёзно, неужели Способ #1 может быть быстрее на каком-то процессоре? А какая операция тогда используется?