algorithm - 查找三个值中较大和较小值的最有效算法

标签 algorithm comparison performance

编辑: 关于有人正在阅读这篇文章的奇怪变化,我想补充最后一件事。 假设有问题的三个值已经在内存中并且没有改变,我计算了至少 14 条指令才能实现这一壮举。

如果有人可以的话,我非常喜欢这个确认。

[置顶编辑结束]

问题很简单。我有三个整数值,我需要找到最大和最小的。我所说的最大不是最小,也不是介于两者之间,反之亦然。

由于无法在网上找到“优质解决方案”,我不得不自己尝试。

if(a > b) {
  if(a > c) {
    high = a;
    if(b > c) {
      low = c;
    }
    else {
      low = b;
    }
  }
  else {
    if(b > c) {
      high = b;
      low = c;
    }
    else {
      high = c;
      low = b;
    }
  }
}
else if(a > c) {
  if(b > c) {
    high = b;
    low = c;
  }
  else {
    high = c;
    low = b;
  }
}
else {
  low = a;
  if(b > c) {
    high = b;
  }
  else {
    high = c;
  }
}

假设我没有犯任何错误,这应该可以使用三个条件来解决问题。

假设它按预期工作,我实际上对我的努力很满意,但我的目的是找到最有效的算法,因此我现在问你那是什么。

最好的问候。

编辑: 我已经审查了迄今为止提出的解决方案,它们都很好。

到目前为止我最喜欢的。

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

2-3 个指令和 2-3 个条件,如果我没记错的话。这令人印象深刻。

上面的小修改,使用“a”作为“min”的别名。

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

要是有一种简单的方法来交换变量就好了……好吧,我唯一能想到的就是可以消除对“max”的需求,至少在 C 和 C 导数中,肯定不会有效,除了内存使用方面,我可以多花 4 个字节。 ;)

最佳答案

因为你只有 3 个,所以我会使用类似的东西:

Maximum = max(a, max(b,c))
Minimum = min(a, min(b,c))

我不太确定您使用的是哪种语言,但大多数语言都有 max 函数,内置或易于访问。

关于algorithm - 查找三个值中较大和较小值的最有效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236863/

相关文章:

Java 8 高级排序

.net - 优化 LINQ to SQL 查询的工具和技术

c# - HashSet<T> 性能(与 ObservableCollection<T> 相比)?

go - 在 Go 中测试从 Function 返回的 Cookie

python - 简化短列表比较

c# - Nullable <= 与 == 比较结果

postgresql - Postgres 对多列的慢速不同查询

algorithm - 负载均衡算法——特例

swift - 算法方法测试

python - 在Python中的字符串中按数字顺序查找最长的字符串