输入两个未知长度的从小到大排列的数组,求出其中位数:
思路:
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;
}