![](/img/trans.png)
[英]Find minimum and maximum values input by the user without using an array
[英]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|/2
和max(a, b) = (a+b)/2 + |ab|/2
。
但是這里有| x | = abs(x)函數,它在內部使用'if'。 因此,我們應該實現沒有任何“ if”的“ abs”。 最簡單的方法之一是: abs(x) = sqrt(x*x)
(這很慢,但這只是一個想法)。 對於整數值,您可以使用這些方法: 1 , 2 ,等等。
因此,您可以實現函數sort(a,b),該函數僅對一對值排序,而沒有任何“ if”。 之后,您可以使用此功能對數組進行排序。 在它之后,該排序數組的第一個元素將是最小值,最后一個元素將是最大元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.