如何在不使用if语句的情况下查找数组中的最大值和最小值?

时间:2013-11-20 07:27:45

标签: c++ arrays c++11 max min

如何在不使用if语句的情况下找到数组中的最大值和最小值。在c ++中是否有内置函数?如果不是插入排序的唯一方法?提前感谢。

2 个答案:

答案 0 :(得分:4)

如果您使用C ++ 11,请使用std::minmax_element,否则使用std::min_element / std::max_element

std::vector<int> v = {1,2,3,4};
auto minmax = std::minmax_element(v.begin(), v.end());
// now minmax.first points on 1 and minmax.second points on 4

但是,如果不应在内部使用if condition - 您可以使用以下内容

template<typename Iterator>
std::pair<Iterator, Iterator> minmax_element(Iterator first, Iterator last)
{
   Iterator min = first, max = first;
   while (first != last)
   {
      min = *min > *first ? first : min;
      max = *max > *first ? max : first;
      ++first;
   }
   return std::make_pair(min, max);
}

答案 1 :(得分:1)

首先,您可以实现函数sort(a,b),它返回一对排序值。为此,您可以使用以下提示:min(a, b) = (a+b)/2 - |a-b|/2max(a, b) = (a+b)/2 + |a-b|/2

但是这里有函数| x | = abs(x),里面使用'if'。所以,我们应该在没有'if'的情况下实现'abs'。最简单的方法之一是:abs(x) = sqrt(x*x)(它非常慢,但它只是一个想法)。对于整数值,您可以使用以下方法:12

因此,您可以实现函数sort(a,b),它只对没有任何'if'的值进行排序。之后,您可以使用此函数对数组进行排序。之后,排序数组的第一个元素将是最小值,最后一个元素将是最大元素。