码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-01 21:59:22      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:分享   image   ++   第一步   img   bis   组合   bubuko   alt   

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

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:

技术分享图片

 


 

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

标签:分享   image   ++   第一步   img   bis   组合   bubuko   alt   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!