Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cプログラムで指定されたリストの中央値を求める方法


リストの要素を大きさの順に並べたとき、全体を同じ個数の2つの部分に分ける中央の値を中央値(メディアン)と呼びます。

要素数が奇数の場合には中央の値がちょうど1つだけ現れますが、偶数の場合には中央に2つの値が並ぶことになります。

そのため、偶数個の要素に対する中央値は「中央にある2つの値の平均」として定義されます。

アルゴリズム

中央値を計算するための手順は、以下のようになります。

  1. 要素の個数を数えながら、配列へ値を読み込みます。
  2. 値を昇順に並べ替えます。
  3. 中央値を計算します。

並べ替え(ソート)のロジック

中央値を求める前に数値を並べ替えるための処理は、隣り合う要素を比較しながら入れ替えていくバブルソートの考え方に基づいています。なお、下記のコードでは条件式の関係上、実際には値が降順に並びます。

for (i = 1 ; i <= n-1 ; i++){
    for (j = 1 ; j <= n-i ; j++){
        if (a[j] <= a[j+1]){
            t = a[j];
            a[j] = a[j+1];
            a[j+1] = t;
        } else
        continue ;
    }
}

中央値を求めるロジック

並べ替えた後、要素数nが偶数なら中央の2つの値の平均を、奇数なら真ん中の値をそのまま中央値として採用します。

if ( n % 2 == 0)
    median = (a[n/2] + a[n/2+1])/2.0 ;
else
    median = a[n/2 + 1];

サンプルプログラム

以下は、入力された数値の中央値を計算するCプログラムの完全な例です。

#include<stdio.h>
#define N 10
main( ){
    int i,j,n;
    float median,a[N],t;
    printf("Enter the number of items\n");
    scanf("%d", &n);
    /* 配列aへ値を読み込む */
    printf("Input %d values \n",n);
    for (i = 1; i <= n ; i++)
    scanf("%f", &a[i]);
    /* ソート開始 */
    for (i = 1 ; i <= n-1 ; i++){ /* 第i回目のパス */
        for (j = 1 ; j <= n-i ; j++) {
            if (a[j] <= a[j+1]) { /* 値を入れ替える */
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
            else
            continue ;
        }
    } /* ソート終了 */
    /* 中央値の計算 */
    if ( n % 2 == 0)
        median = (a[n/2] + a[n/2+1])/2.0 ;
    else
    median = a[n/2 + 1];
    /* 結果の表示 */
    for (i = 1 ; i <= n ; i++)
    printf("%f ", a[i]);
    printf("\n\nMedian is %f\n", median);
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。入力した5つの値が並べ替えられた後、中央に位置する値である「3.8」が中央値として表示されています。

Enter the number of items
5
Input 5 values
2.3
1.2
3.8
4.6
8.9
8.900000 4.600000 3.800000 2.300000 1.200000

Median is 3.800000

  1. 連結リスト(リンクリスト)の長さを求めるC言語プログラム

    連結リスト(リンクリスト)は動的メモリ割り当てを利用するデータ構造であり、要素の追加や削除に応じてサイズが柔軟に変化します。連結リストは「ノード」と呼ばれる要素の集合として定義され、各ノードはデータ部とリンク部(次のノードへのポインタ)の2つの部分で構成されています。データ・リンク・連結リストの関係は、以下のように表現できます。連結リストの種類連結リストには主に以下の4種類があります。単方向連結リスト(シングルリンクリスト)双方向連結リスト(ダブルリンクリスト)循環単方向連結リスト循環双方向連結リスト再帰を使って長さを求めるロジック本記事では、再帰呼び出しを利用して連結リストの長さ(ノード数)

  2. Pythonでリスト内の最小値を見つける方法を解説

    この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。