1.题目描述
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。【用冒泡排序时间复杂度是O(n²)】
2.程序
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int *merge = (int * )malloc ( sizeof(int) * (nums1Size +nums2Size) ) ;
int i = 0;
//复制数组nums1
for(i = 0; i <nums1Size; i++ )
{
merge[i] = nums1[i];
}
//复制数组nums2
for(i = 0; i <nums2Size; i++ )
{
merge[nums1Size + i] = nums2[i];
}
//快速排序
qsort(merge,nums1Size + nums2Size,sizeof(int),cmpfunc);
double middleValue;
if( (nums1Size+ nums2Size) % 2 == 1 )
{
middleValue = (double)merge[ (nums1Size+ nums2Size) / 2];
}
else
{
middleValue = ((double)merge[ (nums1Size+ nums2Size) / 2 - 1] + (double)merge[ (nums1Size+ nums2Size) / 2])/2;
}
return middleValue;
}
3.qsort函数的使用