Можно слиянием за 4 сравнения. uint16_t value[4];
uint16_t pred_value(void)
{ uint16_t t;
if (value[0] < value[1]) { t = value[1]; value[1] = value[0]; value[0] = t; }//1 сравнение и перестановка
if (value[2] < value[3]) { t = value[3]; value[3] = value[2]; value[2] = t; }//2 сравнение и перестановка
// теперь value[0] >= value[1] и value[2] >= value[3]
// value[0] или value[2] содержит максимальное число
if (value[0] < value[2]) //3 сравнение
{//value[2] - max, следовательно предмаксимальное в value[0] или value[3]
if (value[0] < value[3]) {t =value[3];} //4 сравнение, которое выполняется если 3 сравнение дало true
else {t =value[0];}
}
else
{//value[0] - max, следовательно предмаксимальное в value[1] или value[2]
if (value[1] < value[2]) {t =value[2];} //4 сравнение, которое выполняется если 3 сравнение дало false
else {t = value[1];
}
return t;
}