前提:两个比较的序列都为有序的
#include<stdio.h>
#include <iostream>
#include<iomanip>
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;
mid2=(s2+e2)/2;
if(A[mid1]==B[mid2])
return A[mid1];
if(A[mid1]<B[mid2]){
if((s1+e1)%2==0)
s1=mid1;
else
s1=mid1+1;
e2=mid2;
}
else {
if((s2+e2)%2==0)
s2=mid2;
else
s2=mid2+1;
e1=mid1;
}
}
if(A[s1]<B[s2])
return A[s1];
else
return B[s2];
}
void main(){
int a[]={10,20,23,25,63,89,90,95,100};
int b[]={6,13,15,45,49,52,59,77,55};
int MId=SearchMId(a,b,9);
cout<<MId<<endl;
}
运行结果:
时间复杂度:O(log2 n)