方法1: 配列をソートして中央の要素を取得する方法
- 配列をソートするために、C言語の標準ライブラリ関数であるqsort関数を使用します。qsort関数は、配列の要素を昇順に並べ替えます。
- 配列をソートした後、要素数が奇数の場合はソートされた配列の中央の要素が中央値になります。要素数が偶数の場合は、中央に近い2つの要素の平均が中央値になります。
以下に、この方法を示すサンプルコードを示します:
#include <stdio.h>
#include <stdlib.h>
// qsort関数の比較用関数
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
double calculateMedian(int array[], int length) {
// 配列をソートする
qsort(array, length, sizeof(int), compare);
// 中央値を計算する
if (length % 2 == 0) {
// 要素数が偶数の場合
int index1 = length / 2 - 1;
int index2 = length / 2;
return (array[index1] + array[index2]) / 2.0;
} else {
// 要素数が奇数の場合
int index = length / 2;
return array[index];
}
}
int main() {
int array[] = {5, 2, 9, 1, 7, 6, 3, 8, 4};
int length = sizeof(array) / sizeof(array[0]);
double median = calculateMedian(array, length);
printf("中央値: %.2f\n", median);
return 0;
}
方法2: 配列をソートせずに中央値を計算する方法
- 配列の要素をソートせずに中央値を計算する方法もあります。この方法では、以下の手順を使用します。
- 配列の要素を取得し、要素数が奇数の場合は中央の要素を、偶数の場合は中央に近い2つの要素を取得します。
以下に、この方法を示すサンプルコードを示します:
#include <stdio.h>
double calculateMedian(int array[], int length) {
// 中央値を計算する
if (length % 2 == 0) {
// 要素数が偶数の場合
int index1 = length / 2 - 1;
int index2 = length / 2;
return (array[index1] + array[index2]) / 2.0;
} else {
// 要素数が奇数の場合
int index = length / 2;
return array[index];
}
}
int main() {
int array[] = {5, 2, 9, 1, 7, 6, 3, 8, 4};
int length = sizeof(array) / sizeof(array[0]);
double median = calculateMedian(array, length);
printf("中央値: %.2f\n", median);
return 0;
}
これらの方法を使って、C言語で中央値を計算することができます。どちらの方法も正確な結果を提供しますが、要素数が多い場合は方法1の方が効率いいですか。以上のコード例と解説を含むブログ投稿を作成することができます。