#include<stdio.h>
//将数组nums1和nums2进行排序
void sort(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int tmp = 0;
int ret = 0;
for (int i = 0; i< nums1Size; i++)
{
for (int j = 0; j<nums2Size; j++)
{
if (*(nums1 + i) >*(nums2 + j))
{
tmp = *(nums2 + j);
*(nums2 + j) = *(nums1 + i);
*(nums1 + i) = tmp;
}
}
}
for (int i = 0; i < nums2Size - 2; i++){
for (int j = 0; j <= nums2Size-2-i; j++){
if (*(nums2 + j)>*(nums2 + j + 1)){
ret = *(nums2 + j);
*(nums2 + j) = *(nums2 + j + 1);
*(nums2 + j + 1) = ret;
}
}
}
}
//寻找2个有序数组的中位数
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int left = 0;
double ret = 0.0;
int Q = nums1Size + nums2Size;
int right = (nums1Size + nums2Size) - 1;
int mid = (right + left) / 2;
if (0 == Q % 2)
{
if (mid < nums1Size)
{
ret = (*(nums1 + mid) + *(nums2)) / 2.0;
}
else
{
int c = mid - nums1Size;
ret = (*(nums2 + c) + *(nums2 + c + 1)) / 2.0;
}
}
else
{
if (mid < nums1Size)
{
ret = *(nums1 + mid);
}
else
{
int c = mid - nums1Size;
ret = *(nums2 + c);
}
} return ret;
}
int main()
{
int nums1[10] = { 11,12,15,16,17,18,32,53,62,72 };
int nums2[10] = { 3, 5 ,6,13,14,19,33,54,63,73};
int* p = nums1;
int* p1 = nums2;
sort(nums1, 10, nums2, 10);
printf("中位数为:%lf\n", findMedianSortedArrays(nums1, 10, nums2, 10));
return 0;
}
C语言简单实现寻找2个有序数组的中位数
猜你喜欢
转载自blog.csdn.net/m1059247324/article/details/102860751
今日推荐
周排行