merge with recursion.
// 1029. Median(merge version).cpp: 主项目文件。 #include "stdafx.h" #include <cstdio> const int N=1000003; int list1[N],list2[N],mer[2*N]; int cnt; void read(int *list,int length){ for(int i=0;i<length;i++) scanf("%d",list+i); } void merge(int &l1,int h1,int &l2,int h2){ if(l1<=h1&&l2<=h2){ if(list1[l1]<list2[l2]){ mer[cnt++]=list1[l1]; l1++; merge(l1,h1,l2,h2); } else{ mer[cnt++]=list2[l2]; l2++; merge(l1,h1,l2,h2); } } } int main() { int length1,length2; scanf("%d",&length1); read(list1,length1); scanf("%d",&length2); read(list2,length2); cnt=0; int l1=0,l2=0; merge(l1,length1-1,l2,length2-1); if(l1==length1){ for(int i=l2;i<length2;i++) mer[cnt++]=list2[i]; } if(l2==length2){ for(int i=l1;i<length1;i++) mer[cnt++]=list1[i]; } int res; if(cnt&0x01) res=mer[cnt/2]; else res=mer[cnt/2-1]; printf("%d\n",res); return 0; }