中央値のアルゴリズム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
宗一郎

中央値のアルゴリズム

#1

投稿記事 by 宗一郎 » 14年前

3つの数値を入力し、中央値を求めるアルゴリズムについてなのですが、
とりあえず作ってみたのですが、もっと良い方法があるのではないかと質問させていただきました。

中央値を求める関数はこれに合わせて作らなければいけません。
int med(int a, int b, int c);

以下がとりあえず作ってみた関数です。

コード:

int med(int a,int b, int c)
{
	if (a < b && a > c || a > b && a < c) { return a; }
	if (b < a && b > c || b > a && b < c) { return b; }
	return c;
}
何かほかにもっと良い方法やこんなやり方もあるよといったことがあれば、
ご教授お願いします。

初級者
記事: 200
登録日時: 14年前

Re: 中央値のアルゴリズム

#2

投稿記事 by 初級者 » 14年前

2個以上の数値が等しい場合は考えなくていいんですか?

初級者
記事: 200
登録日時: 14年前

Re: 中央値のアルゴリズム

#3

投稿記事 by 初級者 » 14年前

a が b と c の間にあることをより直感的に示すため、私だったらこんな風に書きます。

コード:

    if ((c <= a && a <= b) ¦¦ (b <= a && a <= c)) return a;

アバター
a5ua
記事: 199
登録日時: 15年前

Re: 中央値のアルゴリズム

#4

投稿記事 by a5ua » 14年前

効率的ではありませんが、参考までに

コード:

int med(int a, int b, int c)
{
	if (b < a) return med(b, a, c);
	if (c < b) return med(a, c, b);
	return b;
}

アバター
ゆーずぃ
記事: 62
登録日時: 14年前
住所: 埼玉県

Re: 中央値のアルゴリズム

#5

投稿記事 by ゆーずぃ » 14年前

アルゴリズムとは関係ない個人的趣向ですが、エラー処理以外はあちこちでリターンさせたくないのでこっちの方が好きですw

コード:

int med(int a,int b, int c)
{
 int ret = c;
 if (a < b && a > c || a > b && a < c) { ret = a; }
 if (b < a && b > c || b > a && b < c) { ret = b; } 
return ret;
}

かずま

Re: 中央値のアルゴリズム

#6

投稿記事 by かずま » 14年前

何を返すにしても、比較は最大 3回で十分です。

コード:

int med(int a, int b, int c)
{
    return (a < b) ? (b < c) ? b : (a < c) ? c : a
                   : (a < c) ? a : (b < c) ? c : b;
}

閉鎖

“C言語何でも質問掲示板” へ戻る