Какой лучший способ написать программу, чтобы найти максимум 4 no.s в C / C ++:
или предложить любой другой, если у него есть лучший подход (с точки зрения пространства & временная сложность) решения проблемы
Будет ли такой же алгоритмический подход все же лучшим в случае более 4 переменных?
Для большого количества элементов в стандартной библиотеке есть std::max_element
алгоритм, который делает max(N-1, 0)
сравнения для N
элементы, которые его теоретический минимум, даже для 4 элементов.
На практике, он проходит по всем элементам, как и ваш метод 1., но он может сделать «турнир исключения» из вложенных max
если N
это степень 2 (ваш метод 2). Некоторый оптимизирующий компилятор может даже развернуть цикл и создать сложную цепочку if
заявления (ваш метод 3).
В комментариях решение в стиле C ++ 11 max({a,b,c,d})
был предоставлен @NathanOliver (который работает только в constexpr
контексты). Но в C ++ 1z std::max_element
также станет constexpr
так что это будет полностью общее решение, маленькое или большое, во время выполнения или во время компиляции.
TL; DR: не думайте об этом, используйте стандартную библиотеку, которая выполняет минимально возможный объем работы.
Лучше потерять термин. Как указано в комментариях
max(max(a,b), max(c,d));
очень кратко, однако есть 3 вызова функции. Это немного быстрее кода, но гораздо больше кода, чтобы написать что-то вроде:
if (a>b)
{
if (a>c)
{
if (a>d)
{
return (a);
}
}
}
if (b>a)
{
if (b>c)
{
if (b>d)
{
return (b);
}
}
}
if (c>a)
{
if (c>b)
{
if (c>d)
{
return (c);
}
}
}
if (d>a)
{
if (d>b)
{
if (d>c)
{
return (d);
}
}
}