题目是已知两个排序数组,求它们的中位数,时间复杂度要求是O(log(m+n))。
想了想,还是排序适合我。
#include "stdafx.h"
#include "cctype"
#include "iostream"
#include<math.h>
#include <ctime>
#include "afxtempl.h"
#include "singleLink.h"
using namespace std;
#define random(a,b) (rand()%(b-a+1)+a)
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(NULL));
intoneNum=random(15,20);
inttwoNum=random(20,25);
int*arrayone;
arrayone=(int*)malloc(oneNum*sizeof(int));
int*arraytwo;
arraytwo=(int*)malloc(twoNum*sizeof(int));
for(int i=0;i<oneNum;i++)
{
if(i==0)
{
arrayone[0]=random(1,9);
}
else
arrayone[i]=arrayone[i-1]+random(0,9);
printf("%d",arrayone[i]);
}
printf("\n");
for(int i=0;i<twoNum;i++)
{
if(i==0)
{
arraytwo[0]=random(1,9);
}
else
arraytwo[i]=arraytwo[i-1]+random(0,9);
printf("%d",arraytwo[i]);
}
intpos=0;
intonepos=0;
inttwopos=0;
int*arraysum;
arraysum=(int*)malloc((oneNum+twoNum)*sizeof(int));
while(pos<(oneNum+twoNum))
{
if((onepos<oneNum)&&(twopos<twoNum))
{
if(arrayone[onepos]<=arraytwo[twopos])
{
arraysum[pos]=arrayone[onepos];
onepos++;
}
elseif (arrayone[onepos]>arraytwo[twopos])
{
arraysum[pos]=arraytwo[twopos];
twopos++;
}
}
elseif (onepos<oneNum)
{
arraysum[pos]=arrayone[onepos];
onepos++;
}
elseif (twopos<twoNum)
{
arraysum[pos]=arraytwo[twopos];
twopos++;
}
pos++;
}
printf("\n onenum %d,twonum %d\n",oneNum,twoNum);
doubletmp=(arraysum[(oneNum+twoNum-1)/2]+arraysum[(oneNum+twoNum)/2])/2.0;
for(int i=0;i<oneNum+twoNum;i++)
{
printf("%d,%d ",i+1,arraysum[i]);
if(i%6==5)
printf("\n");
}
printf("\n %f ",tmp);
free(arrayone);
free(arraytwo);
free(arraysum);
system("PAUSE");
return 0;
}