配列の中央値を求めるC言語プログラムの書き方
まず、配列をソートしてから、配列の中央値を見つける。
- クイックソート
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于排序
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {3, 1, 5, 2, 4};
int len = sizeof(arr) / sizeof(arr[0]);
// 对数组进行排序
qsort(arr, len, sizeof(int), compare);
// 打印排序后的数组
printf("Sorted array: ");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
- 配列の長さが奇数の場合は、ソート後の配列の中央項が中央値、配列の長さが偶数の場合は、ソート後の配列の中央2つの平均値が中央値となる。
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {3, 1, 5, 2, 4};
int len = sizeof(arr) / sizeof(arr[0]);
// 对数组进行排序
qsort(arr, len, sizeof(int), compare);
// 打印排序后的数组
printf("Sorted array: ");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 求中位数
int median;
if (len % 2 == 0) {
median = (arr[len/2 - 1] + arr[len/2]) / 2;
} else {
median = arr[len/2];
}
printf("Median: %d\n", median);
return 0;
}
このコードは、最初に配列をソートし、次に配列の長さが奇数か偶数かに基づいて中央値を導き出します。