首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用if语句的情况下找到数组中的最大值和最小值?

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

Stack Overflow用户
提问于 2013-11-20 07:27:45
回答 2查看 2.2K关注 0票数 2

如何在不使用statement.Are的情况下找到数组中的最大值和最小值,如果在c++中存在内置的函数?如果不是,插入排序是唯一的方式?谢谢提前。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-20 07:29:14

如果使用std::minmax_element,则使用C++11;如果不使用,则使用std::min_element/std::max_element

代码语言:javascript
复制
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,则可以使用以下内容

代码语言:javascript
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 2013-11-20 07:51:26

首先,您可以实现函数排序(a,b),它返回一对排序的值。要做到这一点,您可以使用以下思想:min(a, b) = (a+b)/2 - |a-b|/2max(a, b) = (a+b)/2 + |a-b|/2

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20089862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档