#include <iostream>
using namespace std;
int get_median(int a[],int begin1,int end1,int b[],int begin2,int end2,int k){
if(begin1>end1){ //在数组A中无法找到
return get_median(b,begin2,end2,a,begin1,end1,k);
}
int t = (begin1+end1)/2;
if(a[t]>=b[k-t-1]&&a[t]<=b[k-t]){//got it
return a[t];
}else if(a[t]<b[k-t-1]){//too small
return get_median(a,t+1,end1,b,begin2,end2,k);
}else if(a[t]>b[k-t]){//too big
return get_median(a,begin1,t-1,b,begin2,end2,k);
}
return -1;
}
double getMedian(int a[],int m,int b[],int n){
if((m+n)%2==0){//偶数 中位数的值等于下中位数和上中位数的平均值
//下中位数 前共有 (m+n)/2-1 个数
//上中位数 前共有 (m+n)/2 个数
int k= (m+n)/2;
int lm = get_median(a,0,m-1,b,0,n-1,k-1);
int hm = get_median(a,0,m-1,b,0,n-1,k);
return (double)(lm+hm)/2;
}else{ //奇数
int k= (m+n)/2;
return get_median(a,0,m-1,b,0,n-1,k);
}
}
int main(){
int a[]={1,3,4,5};
int b[]={2,6,7,8};
cout<<getMedian(a,4,b,4)<<endl;
return 0;
}