#include<iostream>
using namespace std;
int SearchMid(int a[],int b[],int n){
int s1=0,e1=n-1,s2=0,e2=n-1; //初始化两个序列的上下界
int mid1,mid2;
while(s1<e1 && s2<e2){ //循环直到区间只有一个元素
mid1=(s1+e1)/2; //序列a的中位数的下标
mid2=(s2+e2)/2; //序列b的中位数的下标
if(a[mid1]==b[mid2]){ //当a和b序列的中位数相等时,即为两序列的中位数
return a[mid1];
}
if(a[mid1]<b[mid2]){
if((s1+e1)%2==0)
s1=mid1;
else
s1=mid1+1; //保证a,b序列的长度相等
e2=mid2;
}else{
if((s2+e2)%2==0)
s2=mid2;
else
s2=mid2+1; //保证a,b序列的长度相等
e1=mid1;
}
}
if(a[s1]<b[s2])
return a[s1];
else
return b[s2];
}
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];
}
float mid=SearchMid(a,b,n);
cout<<"中位数:"<<mid<<endl;
system("pause");
}
减治法求解两个升序数组的中位数
最新推荐文章于 2024-06-24 23:23:51 发布