Median of Two Sorted Arrays
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
int find(int A[], int m, int B[], int n, int k) {
if (m == 0) return B[k-1];
if (n == 0) return A[k-1];
if (k == 1) return min(A[0], B[0]);
int ka, kb;
ka = m * k / (m+n);
kb = k - ka;
if (ka == 0) {
ka = 1;
kb = k-1;
}
else if (kb > n) {
kb = n;
ka = k - kb;
}
if (A[ka-1] == B[kb-1]) {
return A[ka-1];
}
else if (A[ka-1] < B[kb-1]) {
return find(A+ka, m-ka, B, kb, k-ka);
}
else {
return find(A, ka, B+kb, n-kb, k-kb);
}
}
double findMedianSortedArrays(int A[], int m, int B[], int n) {
int mn = m+n;
if (mn & 1) {
return find(A, m, B, n, mn/2 + 1);
}
else {
return (find(A, m, B, n, mn/2) + find(A, m, B, n, mn/2+1)) / 2.0;
}
}