有效地找到最小和最大值

时间:2014-01-09 09:56:14

标签: c++ algorithm optimization comparison

我有两个整数参数ab。还有两个整数变量maxmin。 我想将maxa的最大值分配给b,并将min的最小值分配给min = a < b ? a : b; max = a > b ? a : b; 。 我需要做这个操作数百万次,所以我想优化它。我目前正在做以下事情:

{{1}}

这个问题是需要两个if语句。我想知道是否有更好的方法来做到这一点。

5 个答案:

答案 0 :(得分:5)

std::tie(min, max) = std::minmax(a, b);

答案 1 :(得分:4)

if (a < b)
{
    min = a; max = b;
}
else
{
    min = b; max = a;
}

答案 2 :(得分:2)

你可能过早地进行了优化。看看编译器是做什么的。

对于只有一个条件的版本,这很简单: -

if (a < b)
{
  min = a;
  max = b;
}
else
{
  min = b;
  max = a;
}

答案 3 :(得分:1)

或者您可能想要使用一些数学:

int absdiff = abs (a-b);
int sum = a+b;
max = (sum+absdiff)/2;
min = (sum-absdiff)/2;

您可以信任编译器根据基本类型优化所有这些,您可以摆脱分支并获得恒定的执行时间(不依赖于预测变量)。

编辑:

英特尔处理器上的样本abs整数函数:

cdq 
xor eax, edx 
sub eax, edx 

答案 4 :(得分:0)

 min=a;max=b;
 if(a>b) {
   max=a;
   min=b;
 } //Here you don't even need an else statement, i don't know how much time does else take but if it does then you have saved it.