//描述:两个排序的数组,长度都为n,求合并后的排序数组的中位数。注意,此题中两个数组的长度是相等的。
#include <iostream>
#include <math.h>
using namespace std;
int MedianOfTwoSortArray(int a[],int b[],int n)
{
if (n<=0)
{
return -1;
}
if (n==1)
{
return (a[0]+b[0])/2;
}
if (n==2)
{
return (max(a[0],b[0])+min(a[1],b[1]))/2;
}
int median1,median2; //中位数
if (n%2==1) //n为奇数
{
median1 = a[n/2];
median2 = b[n/2];
}
else
{
median1 = (a[(n-1)/2]+a[n/2])/2;
median2 = (b[(n-1)/2]+b[n/2])/2;
}
if (median1<median2)
{
if (n%2==1)
{
MedianOfTwoSortArray(a+n/2,b,n/2+1);
}
else
MedianOfTwoSortArray(a+n/2,b,n/2);
}
else if (median1>median2)
{
if (n%2==1)
{
MedianOfTwoSortArray(a,b+n/2,n/2+1);
}
else
MedianOfTwoSortArray(a+n/2,b,n/2);
}
else
{
return median1;
}
}
int main()
{
int a[4] = {1,5,6,8},b[4]={2,3,7,9};
int res = MedianOfTwoSortArray(a,b,4);
cout<<res<<endl;
system("pause");
return 0;
}
求两个等长有序数组的中位数
最新推荐文章于 2021-03-11 00:05:54 发布