您的位置:首页 > 其它

减治法求解两个升序数组的中位数

2017-03-30 18:22 169 查看
#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
;
int *b=new int
;
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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: