1. 程式人生 > >順序表 | 二分查找:兩個數組合並後的中位數

順序表 | 二分查找:兩個數組合並後的中位數

arch col 出現 sea bis pan pre turn 序列

輸入兩個長度相同的升序數組,返回這兩個數組合並後的中位數

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:

技術分享圖片


順序表 | 二分查找:兩個數組合並後的中位數