找到 no.s 最大值的更好方法是什么?

Which is a better way of finding the max of no.s?

编写程序以在 c/C++ 中查找 4 no.s 的最大值的更好方法是:

  1. 使用第五个变量并将其与所有输入进行比较
  2. 使用 max() 函数
  3. 并使用 if
  4. 比较输入

或建议任何其他方法,如果它有解决问题的更好方法(就 space 和时间复杂度而言)

在超过 4 个变量的情况下,相同的算法方法仍然是最好的吗?

更好的是一个失去的术语。正如评论中指出的

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);
     }
  }
}

对于大量元素,标准库具有 std::max_element 算法,该算法对 N 元素进行 max(N-1, 0) 比较,这是理论上的最小值,即使是 4 个元素

实际上,它会像您的方法 1 一样遍历所有元素,但如果 N 是 2 的幂(您的方法2)。某些优化编译器甚至可能展开循环并生成复杂的 if 语句链(您的方法 3)。

在评论中,@NathanOliver 给出了 C++11 风格的解决方案 max({a,b,c,d})(仅适用于 constexpr 上下文)。但在 C++1z 中,std::max_element 也将变为 constexpr,因此它将成为完全通用的解决方案,无论大小,运行时还是编译时。

TL;DR:不要想太多,使用可证明工作量最少的标准库。