题目:找两个已经排序的数组X[1..n],Y[1...n] 合并后的中位数,要求算法时间是logn。
稍微想了一下,利用中位数的思想来进行二分,这样就可以在logn的时间内找到中位数。按照这个思想写出来的代码在一定概率下能够找到中位数,但是有些情况发会发生常数项的偏移。后来看 “正在跟新昵称“ 童鞋的blog,发现他进行了很好地修正。 十分感谢。 附上代码:
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
using namespace std;
int * generateArray(int n);
void printArray(int *A,int p,int r);
void FindMiddle(int*A,int *B,int n);
void vilentMiddle(int *A,int *B,int n);
void FindMiddleB(int*A,int *B,int n);
int main ()
{
srand(time(NULL));
int k = 15;
int *A = generateArray(k);
printArray(A,0,k);
int *B = generateArray(k);
printArray(B,0,k);
FindMiddle(A,B,k);
//FindMiddleB(A,B,k);
vilentMiddle(A,B,k);
}
int * generateArray(int n)
{
int *A = new int[n];
for (int i =0;i < n;i ++)
{
A[i] = rand();
}
sort(A