Подход 1 подходит для всех случаев, поэтому, если вы пишете код без учета особого контекста, я бы использовал его.
Подход 2 зависит от типа переменной. Если вы измените его с int32
на любое другое, вам придется переписать программу. Кстати, для беззнаковых типов 0
является минимальным значением, и специальная константа не может быть определена.
Подход 3 требует, чтобы ваша последовательность (массив) не была пустой и не могла использоваться без дополнительной проверки длины.
Мне нравится эта модификация подхода 3:
// assuming size is of size_t and can't be negative
int min = size ? a[0] : 0;
int max = min;
for(int i = 1; i < size; i++)
{
if(a[i] > max) max = a[i];
if(a[i] < min) min = a[i];
}
UPD
Я действительно удивлен, когда люди думают, что Подход 1 не будет работать с отрицательными числами. Это будет , потому что на первой итерации, когда проверяется i==0
, мы всегда инициируем min
и max
с первым элементом. В случае сомнений я рекомендую запускать этот код в отрицательной последовательности - он работает (я проверял)