题目要求如下:
对于奇数,中位数是整个序列中间的那位。而对于偶数,中位数中序列中间2位数的平均数。
对于偶数,由于C中的索引是从0开始,假设序列为arr,因此中间两位数为arr[(len-1)/2]
和arr[(len-1)/2+1]
。
下面是实现的代码:
#include <stdio.h>
#include <stdlib.h>
int int_compare(const void *p1, const void *p2) {
int *a = (int *) p1;
int *b = (int *) p2;
return *b - *a;
}
int main(int argc, char **argv) {
int num;
while (scanf("%d", &num) != EOF) {
if (num == 0) {
break;
}
int n;
int arr[10000] = {0};
for (int j = 0; j < num; ++j) {
scanf("%d", &n);
arr[j] = n;
}
qsort(arr, num, sizeof(int), int_compare);
if (num & 1) {
printf("%d\n", arr[num / 2]);
} else {
printf("%d\n", (arr[(num - 1) / 2] + arr[(num - 1) / 2 + 1]) / 2);
}
}
return 0;
}
最终测试通过后的结果: