求中位数

输入两个未知长度的从小到大排列的数组,求出其中位数:

思路:
1.首先将两组数据按照从小到大排列,拿他们的首元素进行对比,总是选取最小的放在新数组中,直到有一个数组遍历完毕,就把另一个数组里剩下的元素放入新元素的尾部。
2.然后分数组是奇书还是偶数,是奇数,就直接找到中间的数输出;如果是偶数就取[总长度/2]+1

#include <stdio.h>
#include <string.h>
int main()
{


    int n=0,m=0,i,j,h; //n记录数组a的长度 m记录数组b的长度
    int a[10086],b[10086],c[10086];
    char ch=0;
	while (ch != '
'){
	scanf("%d",&a[n]);
	ch = getchar();
	n++;
	}
	ch=0;
	while (ch != '
'){ 
	scanf("%d",&b[m]);
	ch = getchar();
	m++;
	}


//插入排序
   int len = n+m;
    i = 0;
	j = 0;
	h = 0;
	while(i<n && j<m){
		if(a[i]<=b[j]){ //找到最小的放到c数组中
		c[h++] = a[i++];
		}else{
		c[h++] = b[j++];
		}
	}
	   if(i!=n && i==m){ //如果a数组又剩下的,将剩下的数组放到C数组中
		   for(;i<n;i++){
			 c[h++] = a[i];
		   }
	   }

	   if(i!=m && i==n){ //如果a数组又剩下的,将剩下的数组放到C数组中
		  for(;i<m;i++){
			 c[h++] = b[i];
		   }
	   }

	   if((n+m)%2!=0) //如果是偶数
        printf("%d
",c[(n+m)/2]);
	   else //如果是奇数
		printf("%d
",(c[(n+m)/2]+c[(n+m)/2-1])/2);

return 0;

}



原文地址:https://www.cnblogs.com/CCCrunner/p/11781608.html