您的位置:首页 > 其它

求两个等长有序数组的中位数

2015-03-27 21:33 295 查看
//描述:两个排序的数组,长度都为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: