簡體   English   中英

如何在不使用if語句的情況下找到數組中的最大值和最小值?

[英]How to find the maximum and minimum value in an array without using if statement?

如何在不使用if語句的情況下在數組中找到最大值和最小值?在c ++中是否有內置函數可以這樣做? 如果不是,插入排序是唯一的方法嗎?謝謝。

如果使用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);
}

首先,您可以實現函數sort(a,b),該函數返回一對已排序的值。 為此,您可以使用以下想法: min(a, b) = (a+b)/2 - |ab|/2max(a, b) = (a+b)/2 + |ab|/2

但是這里有| x | = abs(x)函數,它在內部使用'if'。 因此,我們應該實現沒有任何“ if”的“ abs”。 最簡單的方法之一是: abs(x) = sqrt(x*x) (這很慢,但這只是一個想法)。 對於整數值,您可以使用這些方法: 12 ,等等。

因此,您可以實現函數sort(a,b),該函數僅對一對值排序,而沒有任何“ if”。 之后,您可以使用此功能對數組進行排序。 在它之后,該排序數組的第一個元素將是最小值,最后一個元素將是最大元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM