有兩個數組,裏邊存儲的數據是有序的,求兩個數組中的中位數(不允許使用擴容機制,不允許在創建一個數組)
![在這裏插入圖片描述](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;
}
有兩個數組,裏邊存儲的數據是有序的,求兩個數組中的中位數(不允許使用擴容機制,不允許在創建一個數組)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.