順序表 | 二分查找:兩個數組合並後的中位數
阿新 • • 發佈:2018-01-01
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:
順序表 | 二分查找:兩個數組合並後的中位數