有兩個數組,裏邊存儲的數據是有序的,求兩個數組中的中位數(不允許使用擴容機制,不允許在創建一個數組)

有兩個數組,裏邊存儲的數據是有序的,求兩個數組中的中位數(不允許使用擴容機制,不允許在創建一個數組)
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190824163616609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQwNzU3Nw==,size_16,color_FFFFFF,t_70)
#include<stdio.h>
#include<iostream>
using namespace std;

double fun(int arr[],int len1,int brr[],int len2)
{
	double mid = 0;
	int tmp = 0;
	int i = 0;
	int j = 0;
	for(int i = 0,j = 0;i <= len1,j <= len2;)
	{
		if(arr[i] > brr[j])//遍歷誰小誰往後走
		{
			tmp = brr[j];
			j++;
		}
		else
		{
			tmp = arr[i];
			i++;
		}
		if((len1 + len2) % 2 == 0)//判斷兩個數組的個數是奇數還是偶數
		{
			if(((i + j) == ((len1 + len2 - 1)/2))&& i < len1 && j < len2)//判斷中位數i,j都在數組的中間,並且比較出中位數
			{
				mid = (double)(arr[i] + brr[j])/2;
			}
			else if(arr[len1] < brr[0] && len1 > (len1 + len2)/2)//當數組arr的數據大於brr的數據時,並且arr[len1] <brr[0]
			{
				mid = (double)(arr[(len1 + len2)/2] + arr[((len1 + len2)/2) - 1])/2;
			}
			else if((i + j) < ((len1 + len2 - 1)/2))
			{
				if(i > j)
				{
					int k = 0;
					k = ((len1 + len2 - 1)/2) - i - j;
					mid = (double)(brr[k] + brr[k - 1])/2;
				}
				else
				{
					int k = 0;
					k = ((len1 + len2 - 1)/2) - i - j;
					mid = (double)(arr[k] + arr[k - 1])/2;
				}
			}
			//else if((i + j) < ((len1 + len2 - 1)/2))
		}
		else//當兩個數組的個數爲奇數個時
		{
			if(((i + j) == (len1 + len2)/2)&& i < len1 && j < len2)
			{
				if(arr[i] > brr[j])
				{
					mid = brr[j];
				}
				else
				{
					mid = arr[i];
				}
			}
		}
	}
	cout << mid << endl;
	return mid;
}
int main()
{
	int arr[] = {1,2,3,4,5,6};
	int brr[] = {7,8,9,10,11,12,13,14};
	int len1 = sizeof(arr)/sizeof(arr[0]);
	int len2 = sizeof(brr)/sizeof(brr[0]);
	fun(arr,len1,brr,len2);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章