//定义辅助比较函数 intmin(int a, int b) { if(a > b) return b; elsereturn a; }
//定义递归调用该函数 intfindKth(int* nums1, int i, int nums1Size, int* nums2, int j, int nums2Size, int k) { if(i >= nums1Size) { return nums2[j + k - 1]; } if(j >= nums2Size) { return nums1[i + k - 1]; }
if(k == 1) { return min(nums1[i], nums2[j]); }
int midValue1 = (i + k / 2 - 1 < nums1Size) ? nums1[i + k / 2-1] : INT_MAX; int midValue2 = (j + k / 2 - 1 < nums2Size) ? nums2[j + k / 2-1] : INT_MAX;
if(midValue1 < midValue2) { return findKth(nums1, i + k / 2, nums1Size, nums2, j, nums2Size, k - k / 2); } else { return findKth(nums1, i, nums1Size, nums2, j + k / 2, nums2Size, k - k / 2); } // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut // return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present) }
doublefindMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { int m = nums1Size, n = nums2Size; int left = (m + n + 1) / 2, right = (m + n + 2) / 2; //初始化K的位置,找到以后返回两者平均值即可
return (findKth(nums1, 0, m, nums2, 0, n, left) + findKth(nums1, 0 , m, nums2, 0, n, right)) / 2.0; }