この記事では、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
が表示されます。
中央値を求める方法は、配列の要素をソートするかしないかで異なりますが、どちらの方法でも正確な結果を得ることができます。