找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)
(算法导论第三版9.3-8)
时间复杂度O(lgn)
int find_median_two_ordered_arrays(int *array_a,int *array_b,int length)
{
int a_start = 0,a_end = length - 1,b_start = 0,b_end = length - 1;
while (true)
{
int median_a = array_a[a_start + (a_end - a_start)/2];
int median_b = array_b[b_start + (b_end - b_start)/2];
if(median_a == median_b) return median_a;
else if(a_start == a_end)
{
return array_a[a_start]<array_b[b_start]?array_a[a_start]:array_b[b_start];
}
//保证数组大小一致
if(median_a>median_b)
{
a_end = a_start + (a_end - a_start)/2;
b_start = b_end - (b_end - b_start)/2;
}
else
{
a_start = a_end - (a_end - a_start)/2;
b_end = b_start + (b_end - b_start)/2;
}
}
}