在Java中对3个值进行排序的最快方法

use*_*735 0 java sorting

我必须按正确的顺序放置3个值并将它们打印到控制台.

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

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

ami*_*mit 17

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

if (a > b)
   swap(a,b)
if (b > c)
   swap(b,c)
if (a > b)
   swap(a,b)
print a,b,c
Run Code Online (Sandbox Code Playgroud)

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


Tra*_*s J 6

优化这一点毫无意义.它不会获得任何速度.O(n!)for 3仍然只有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;
 }
}
Run Code Online (Sandbox Code Playgroud)

  • 下面的代码似乎没有必要:`if( b > c ){ max = b; 分钟 = c; }else{` 因为一旦a大于b,但a不大于c,那么b永远不会大于c。 (2认同)