中位数



【描述】

中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值)。

给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)。

【输入】

包含多组测试数据,每一组测试数据的第一行为n,代表该组测试数据包含的数据个数,1n15000

接着n行为n个数据。n0时结束输入

【输出】

输出中位数,每一组测试数据输出一行。

【输入示例】

4

10

30

20

40

3

40

30

50

4

1

2

3

4

0

【输出示例】

25

40

2

C代码】

---------------

#include<stdio.h>

#include<stdlib.h>

#defineARRAY_SIZE 15000

intcomp(const void *p, const void *q) {

    return *(int *)p - *(int *)q;

}

intmain(void) {

int array[ARRAY_SIZE];

int i, n;

while(1) {

        scanf("%d", &n);

        if(!n)

            break;

        for(i = 0; i < n; ++i)

            scanf("%d",&array[i]);

        qsort(array, n, sizeof(int), comp);

        if(n % 2 != 0)

            printf("%d\n", array[n /2]);

        else

            printf("%d\n", (array[n /2 - 1] + array[n / 2]) / 2);

    }

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值