这是编写程序以在c / C ++中找到最大4个no的更好方法:
或建议任何其他,如果它有更好的方法(在空间和时间复杂性方面)解决问题
如果超过4个变量,相同的算法方法仍然是最好的吗?
答案 0 :(得分:2)
对于大量元素,标准库使用std::max_element
算法对max(N-1, 0)
元素进行N
比较,这是理论上的最小值,即使对于4个元素也是如此。
在实践中,它会像方法1一样循环遍历所有元素,但如果max
是2的幂,它可以执行嵌套N
的“淘汰锦标赛”(您的方法2) 。一些优化编译器甚至可以展开循环并生成一个复杂的if
语句链(您的方法3)。
在评论中,C ++ 11样式解决方案max({a,b,c,d})
由@NathanOliver提供(仅适用于constexpr
上下文)。但是在C ++ 1z中,std::max_element
也将成为constexpr
,因此它将是完全通用的解决方案,无论是小型还是大型,运行时还是编译时。
TL; DR :不要过度思考,使用标准库,它可以证明工作量极少。
答案 1 :(得分:0)
更好的是一个失败的术语。正如评论中指出的那样
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);
}
}
}