题目
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A 0 ,A 1,⋯,A N−1 的中位数指A (N−1)/2 的值,即第⌊(N+1)/2⌋个数(A 0 为第1个数)。
代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
#define Maxsize 20
void Merge(int a[],int b[],int k);
void main(){
int a[MaxSize],b[MaxSize],i,len;
printf("输入长度\n");
scanf("%d",&len);
printf("输入a数组\n");
for(i=0;i<len;i++)
scanf("%d",&a[i]);
printf("输入b数组\n");
for(i=0;i<len;i++)
scanf("%d",&b[i]);
Merge(a,b,len);
}
void Merge(int a[],int b[],int k){
int c[Maxsize],i,j,l=0,mid;
for(i=0,j=0;i<k&&j<k;l++){
if(a[i]<=b[j]){
c[l]=a[i];
i++;
}else{
c[l]=b[j];
j++;
}
}
while(i<k){
c[l]=a[i];
l++;
i++;
}
while(j<k){
c[l]=b[j];
l++;
j++;
}
for(i=0;i<k*2;i++)
printf("%d ",c[i]);
mid=(k*2-1)/2;
printf(" %d",c[mid]);
}