首页 > 编程语言 > 详细

顺序表 | 二分查找:两个数组合并后的中位数

时间:2018-01-01 21:06:39      阅读:312      评论:0      收藏:0      [点我收藏+]

输入两个长度相同的升序数组,返回这两个数组合并后的中位数

C++代码:

int bisearch_midNum(int a[],int b[],int n){
    int s1=0,s2=0,d1=n-1,d2=n-1,m1,m2;
    while(s1!=d1 || s2!=d2){//只要a,b序列同时出现了s==d的情况,才能False退出
        m1=(s1+d1)/2;
        m2=(s2+d2)/2;
        system("pause");
        if(a[m1]==b[m2])
            return a[m1];
        else if(a[m1]<b[m2]){//∈[m1,m2]
            d2=m2;
            if((d1-s1)%2){//偶数
                m1++;//舍去中间位
            }
            s1=m1;
        }else{               //∈[0,m1]∪[m2,n]
            d1=m1;
            if((d2-s2)%2){//偶数
                m2++;//舍去中间位
            }
            s2=m2;
        }
    }
    //返回较小者
    return min(a[s1],b[s2]);
}

 

 


 

 

一步一调理解此题:

●第一组数据:

 第一步:a→  ←b

技术分享图片

(如果【s1,d1】是偶数,就舍弃m1,即(m1,d1])

第二步:a→  ←b

技术分享图片

第三步:←a b→

技术分享图片

 

第四步:←a b→

技术分享图片

b的中位数取9是因为【←a b→】这种情况要舍弃左边的m。

m1==s1,m2==s2,终止。在a【s1】与 b【s2】中取最小者,即6。

两个数组融合后的中位数也为6:

技术分享图片

 


 

顺序表 | 二分查找:两个数组合并后的中位数

原文:https://www.cnblogs.com/TQCAI/p/8168812.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!