两个等长的升序数组,在不建立新数组的状况下,求两个数组的全部元素的中位数数组
问题能够转化为: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 }