#include<iostream>
using namespace std;
//求序列的中位数
float mid(int m, int n,int arry[])
{
int middle = (n+m+1)/2;
float re;
if((n-m)%2==0)
re = arry[middle]/1.0;
else
re = (arry[middle-1] + arry[middle])/2.0;
return re;
}
//求整合序列的中位数
float findmid(int arry1[],int arry2[],int b1,int b2,int l1,int l2)
{
int mid1 = (b1 + l1 + 1)/2;
int mid2 = (b2 + l2 + 1)/2;
float mm1,mm2;
mm1 = mid(b1,l1,arry1);
mm2 = mid(b2,l2,arry2);
if(l1==b1 && l2==b2)
return (mm1 + mm2)/2.0;
if(mm1 == mm2)
return mm1;
else if(mm1 < mm2)
{
if((l2-b2)%2!=0)
return findmid(arry1,arry2,mid1,b2,l1,mid2-1);
else
return findmid(arry1,arry2,mid1,b2,l1,mid2);
}
else
{
if((l1-b1)%2!=0)
return findmid(arry1,arry2,b1,mid2,mid1-1,l2);
else
return findmid(arry1,arry2,b1,mid2,mid1,l2);
}
}
int main(){
int n;
cout<<"请输入序列的长度:";
cin>>n;
int *a=new int[n];
int *b=new int[n];
cout<<"请输入第一个序列:"<<endl;
for(int i=0;i<n;i++){
cin>>a[i];
}
cout<<"请输入第二个序列:"<<endl;;
for(int i=0;i<n;i++){
cin>>b[i];
}
int mid=findmid(a,b,0,0,n-1,n-1);
cout<<"中位数:"<<mid<<endl;
system("pause");
}
分治法求解两个升序数组的中位数
最新推荐文章于 2021-05-25 10:02:13 发布