BohYoh.comトップページへ

新・明解Javaで学ぶアルゴリズムとデータ構造

戻る  

演習1-5の解答

 中央値を求める手続きは、以下のようにも実現できる。ただし、List 1C-1に示すmed3 と比較すると実行効率が悪い。その理由を考察せよ。

static int med3(int a, int b, int c) {
   if ((b >= a && c <= a) || (b <= a && c >= a))
      return a;
   else if ((a > b && c < b) || (a < b && c > b))
      return b;
   return c;
}


 最初のif文の判定
  if ((b >= a && c<= a) || (b <= a && c >= a)
に着目します。ここでb >= aおよびb <= aの判定を裏返した判定(実質的に同一の判定)が、続くelse以降で
  else if ((a > b && c < b) || (b <= a && c > b)
と行われます。つまり、最初のifが成立しなかった場合、2番目のifでも(実質的に)同じ判定を行っているため、効率が悪くなるのです。

戻る