0

3つの値を正しい順序で並べて、コンソールに出力する必要があります。

解決策は、それらを配列に入れてから並べ替えることですが、(学校時代から)比較して順序付けする方が速いことを覚えていますが、正しい比較順序を見つけることができません。

if3つの値を最小数のステートメントと比較する方法を教えてください。

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

n!=6配列には順列が存在する可能性があるため、3回未満の比較では実行できません。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はソートにクイックソートアルゴリズムを使用しています。これはすでに最適化されたアプローチです。ここで収穫するスピードはありません!

于 2015-12-03T15:26:28.440 に答える