兩個等長的升序數組,在不建立新數組的狀況下,求兩個數組的全部元素的中位數數組
問題能夠轉化爲:spa
設a、b分別爲兩個數組的中位數,則code
①若a=b,則a即爲所求blog
②若a<b,則捨去A中較小的一半,同時捨去B中較大的一半,要求兩次捨去的序列長度相同class
③若a>b,則捨去A中較大的一半,同時捨去b中較小的一半,要求兩次捨去的序列長度相同di
1 int M_Search(int A[],int B[],int n){ 2 // 首位數,末尾數,中位數 3 int s1=0,d1=n-1,m1; 4 int s2=0,d2=n-1,m2; 5 6 while (s1!=s2 || s2!=d2){ 7 m1=(s1+d1)/2; 8 m2=(s2+d2)/2; 9 if(A[m1]==B[m2]) //符合① 10 return A[m1]; 11 12 if(A[m1]<B[m2]){ //符合② 13 if((s1+d1)/2 == 0){ //元素個數爲奇數 14 s1=m1; //捨棄A[s1]~A[m1-1] 15 d2=m2; //捨棄B[m2+1]~B[d2] 16 } 17 else{ //元素個數爲偶數 18 s1=m1+1; //捨棄A[s1]~A[m1] 19 d2=m2; //捨棄B[m2]~B[d2] 20 } 21 } 22 else{ //符合③ 23 if((s2+d2)/2 == 0) //元素個數爲奇數 24 s2=m2; //捨棄B[s1]~B[m2-1] 25 else //元素個數爲偶數 26 s2=m2+1; 27 d1=m1; 28 } 29 } 30 if(A[s1]<B[s2)) 31 return A[s1]; 32 return B[s2]; 33 }