【C言語】中央値の求め方を解説

この記事では、C言語で中央値を求める方法について解説します。

目次から探す

中央値の求め方

プログラミングにおいて、中央値はデータの中央に位置する値を指します。

C言語では、配列の要素から中央値を求める方法があります。

ここでは、方法1と方法2の2つのアプローチを紹介します。

方法1: 配列をソートして中央の要素を取得する

この方法では、まず配列を昇順にソートし、その後中央の要素を取得します。

以下に、この方法のサンプルコードを示します。

#include <stdio.h>
// 配列を昇順にソートする関数
void sortArray(int arr[], int size) {
    int i, j, temp;
    for (i = 0; i < size - 1; i++) {
        for (j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
// 配列の中央値を求める関数
int getMedian(int arr[], int size) {
    sortArray(arr, size); // 配列をソートする
    return arr[size / 2]; // 中央の要素を返す
}
int main() {
    int arr[] = {5, 2, 8, 1, 9, 3, 7};
    int size = sizeof(arr) / sizeof(arr[0]);
    int median = getMedian(arr, size);
    
    printf("中央値: %d\n", median);
    
    return 0;
}

上記のコードでは、sortArray関数を使って配列を昇順にソートし、getMedian関数で中央の要素を取得しています。

このサンプルコードを実行すると、配列 {5, 2, 8, 1, 9, 3, 7} の中央値である 5 が表示されます。

方法2: 配列をソートせずに中央値を求める

方法1では、配列をソートする必要がありますが、配列が大きい場合やソートの処理が時間がかかる場合には効率が悪いです。

そこで、方法2ではソートせずに中央値を求める方法を紹介します。

以下に、この方法のサンプルコードを示します。

#include <stdio.h>
// 配列の中央値を求める関数
int getMedian(int arr[], int size) {
    int i, j, temp;
    for (i = 0; i < size - 1; i++) {
        for (j = i + 1; j < size; j++) {
            if (arr[i] > arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    
    return arr[size / 2]; // 中央の要素を返す
}
int main() {
    int arr[] = {5, 2, 8, 1, 9, 3, 7};
    int size = sizeof(arr) / sizeof(arr[0]);
    int median = getMedian(arr, size);
    
    printf("中央値: %d\n", median);
    
    return 0;
}

上記のコードでは、ソートの処理を行わずに、2つのループを使って中央値を求めています。

このサンプルコードを実行すると、配列 {5, 2, 8, 1, 9, 3, 7} の中央値である 5 が表示されます。

中央値を求める方法は、配列の要素をソートするかしないかで異なりますが、どちらの方法でも正確な結果を得ることができます。

目次から探す