BohYoh.comトップページへ

Javaによるアルゴリズムとデータ構造

戻る  

演習1-5の解答

 中央値を求める手続きは、以下のようにも実現できるものの、Column 1-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でも(実質的に)同じ判定を行っているため、効率が悪くなるのです。

戻る