C语言简单实现寻找2个有序数组的中位数

#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;
}

在这里插入图片描述

发布了27 篇原创文章 · 获赞 10 · 访问量 685

猜你喜欢

转载自blog.csdn.net/m1059247324/article/details/102860751