0

我必须按正确的顺序输入 3 个值并将它们打印到控制台。

一个解决方案是将它们放入一个数组中,然后对它们进行排序,但我记得(从学校时代起)比较和排序它们的速度更快,但是我找不到正确的比较顺序。

您能否告诉我如何将 3 个值与最少的if语句数进行比较?

4

3 回答 3

21

冒泡排序在最坏的情况下只有 3 个比较操作和 6 个分配(如果与这种情况下的插入排序的行为不同,它将非常相似):

if (a > b)
   swap(a,b)
if (b > c)
   swap(b,c)
if (a > b)
   swap(a,b)
print a,b,c

它不能在少于 3 次比较中完成,因为n!=6数组可能存在排列,并且ceil(log_2(n!)) = 3

于 2012-10-23T22:46:39.733 回答
10

优化这个没有意义。它不会获得任何速度。3 的 O(n!) 仍然只有 3*2 = 6 次操作。甚至 O(2^n) 也将是 8。您真的可以尽一切努力对这 3 个值进行排序,而不会看到性能差异。

编辑

int a, b, c, min, max, med;//assume values are there for a b c
if( a > b ){
 if( a > c ){
  max = a;
  if( b > c ){
   med = b;
   min = c;
  }else{
   med = c;
   min = b;
  }
 }else{
  med = a;
  max = c;
  min = b;
 }
}else{
 if( b > c ){
  max = b;
  if( a > c ){
   med = a;
   min = c;
  }else{
   med = c;
   min = a;
  }
 }else{
  med = b;
  max = c;
  min = a;
 }
}
于 2012-10-23T22:23:24.307 回答
0

据我所知,Java 使用Quicksort算法进行排序——一种已经优化的方法。这里没有收获的速度!

于 2015-12-03T15:26:28.440 回答