利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。
要输入的内容在文件1.txt中,输出的结果在文件2.txt中。
#include<iostream>
#include<fstream>
using namespace std;
template <class T>
T mid(T *a,T *b,int len)
{
if(len==1)
return *a<*b?*a:*b;
if(len==2)
{
int temp=*a>=*b?*a:*b;
if(temp==*a)
return temp<*(b+1)?temp:*(b+1);
else
return temp<*(a+1)?temp:*(a+1);
}
int n;
if(len%2==0)
n=len/2;
else
n=len/2+1;
if(*(a+n-1)==*(b+n-1))
return *(a+n-1);
else if(*(a+n-1)<*(b+n-1))
return mid(a+n-1,b,n);
else if(*(a+n-1)>*(b+n-1))
return mid(a,b+n-1,n);
}
int main()
{
int a[5];
int b[5];
ifstream f1("1.txt");
ofstream f2("2.txt");
int len;
f1>>len;
for(int i=0;i<len;i++)
f1>>a[i];
for(i=0;i<len;i++)
f1>>b[i];
int *pa=a;
int *pb=b;
int m=mid(pa,pb,len);
cout<<m<<endl;
f2<<m;
f1.close();
f2.close();
return 1;
}
运行结果: