#include <stdio.h>int MidSearch(int *A,int *B,int n)
{//分别表示序列A到序列B的首位元素,末位数和中位数。s是star简写,d是end简写int s1=0,d1=n-1,m1,s2=0,d2=n-1,m2;//循环判断结束条件是,两个数组均不断删除 最后均只能剩余一个元素while (s1!=d1||s2!=d2){m1=(s1+d1)/2;m2=(s2+d2)/2;if(A[m1]==B[m2]){return A[m1];//满足条件1}else if(A[m1]<B[m2])//满足条件2{if((s1+d1)%2==0){//若元素个数为奇数,这里注意组数下标从0开始 五个元素其下标最大就是4s1=m1;d2=m2;//夹逼准则}else{//元素个数为偶数s1=m1+1;//舍弃A中间点及以前部分d2=m2;}} else{//满足条件3)下面的操作和上面的操作2是完全对称的A[m1]>B[m2]if((s1+d1)%2==0){//元素个数为奇数,d1=m1;//舍弃A中间点及以后部分s2=m2;//舍弃B中间点及以前部分}else {//元素个数为偶数,d1 = m1;//舍弃A中间点及以后部分s2 = m2 + 1;//舍弃B中间点及以前部分}}}return A[s1]<B[s2] ? A[s1] : B[s2];//因为题目要的是11 所以拿小的那个
}int main()
{int A[]={11,13,15,17,19};int B[]={2,4,6,8,20};int mid= MidSearch(A,B,5);printf("mid=%d\n",mid);return 0;
}