#include <stdio.h>
int MidSearch(int *A,int *B,int n){
int s1=0,d1=n-1,m1;
int s2=0,d2=n-1,m2;
while (s1!=d1||s2!=d2){
m1=(s1+d1)/2;
m2=(s2+d2)/2;
if(A[m1]==B[m2]){
return A[m1];
} else if (A[m1]<B[m2]){
if((s1+d1)%2==0){ //中位数m下标为奇数
s1=m1;//只能删除中位数之前,因为此处的中位数可能是目标中位数
d2=m2;
} else{
s1=m1+1;
d2=m2;
}
} else{
if((s1+d1)%2==0){ //中位数m下标为奇数
d1 =m1;
s2 =m2;
} else{
d1=m1;
s2=m2+1;
}
}
}
return A[s1]<B[s2]?A[s1]:B[s2];
}
int main() {
int A[] = { 11,13,15,17,19};//我们也可以分别把 A 和 B 都变为偶数个元素来测试
int B[] = { 2,4,6,8,20};
int mid = MidSearch(A, B, 5);
printf("mid=%d\n", mid);
return 0;
}
求两个等长数组的中位数
于 2024-03-29 17:12:16 首次发布