C++的一个算法问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 08:31:31
有两个升序排列的有序数组,长度分别为m和n各个元素都无重复,请设计一个运行时间为O(lgm+lgn)的算法,找出两个数组所有数字中第K大的元素
是两个数组合起来找一个

我没有现成的程序,
这个是只针对一个数组,找这个数组中的第K小的数,你稍微改一点点就可以了
#include<iostream>
using namespace std;
int n,k,a[50005],i;
int select(int s,int t)
{
int i,j,r;
i=s;j=t;r=a[i];
while(i<j)
{ while(i<j&&r<=a[j])j--;
a[i]=a[j];
while(i<j&&r>=a[i])i++;
a[j]=a[i];
}
a[i]=r;
if(i==k)return i;
if(i>k)return select(s,i-1);
else return select(i+1,t);
}
int main()
{
cin>>n>>k;
for(i=1;i<=n;i++)scanf("%d%",&a[i]);
cout<<a[select(1,n)];
return 0;
}