首页 > 代码库 > 中位数

中位数

数组
第10题
【描述】
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值)。
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)。
【输入】
包含多组测试数据,每一组测试数据的第一行为n,代表该组测试数据包含的数据个数,1 <= n <=10000。
接着n行为n个数据。n为0时结束输入。
【输出】
输出中位数,每一组测试数据输出一行。
【输入示例】
4
10
30
20
40
3
40
30
50
4
1
2
3
4
0
【输出示例】
25
40
2




#include<stdio.h>
	//一开始忘记排序了
	
	void queue(int a[],int i){   //a[]前要加类型名,[]里面不用加数字 
		int t,p,temp;
		for(t=0;t<i;t++)
			for(p=0;p<i-t;p++){
				if(a[p]>a[p+1]){
					temp=a[p+1];
					a[p+1]=a[p];
					a[p]=temp;
					}//一开始这里的if的{}忘记加了,导致结果为0; 
			}
	} 
	int main(){
		int n,i=0,t,mid;
		int a[100];
		while(1){

		scanf("%d",&n);
		if(n==0)
			break;			
		while(n--){
			scanf("%d",&a[i++]);
		}//这之后n无效了,有i个数据 
		queue(a,i);          //实参里的数组只需要一个数组名a就行了,不用[]
		if(i%2==0)
			printf("%d\n",(a[i/2]+a[i/2-1])/2);
		else
			printf("%d\n",a[(i-1)/2]);
		i=0;
		
	}
}


中位数