【代码】快速并归算法
不知道是不是原创,随性写了写。分析了4中情况
a没有遍历完+b没有遍历完且b长度大于a
a没有遍历完且a长度大于b+b遍历完
a遍历完+b没有遍历完
a,b有一个遍历完且a长度==b
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={2,4,5,6,12,13};
int b[]={1,3,4,7,8,9,10,11,12,13};
int la=sizeof(a)/sizeof(a[0]);
int lb=sizeof(b)/sizeof(b[0]);
int lc=la+lb;
int *c=new int[lc];
int i;
int m,n;
m=n=i=0;
while(i<lc)
{
if(m<la && n<lb)
{
if( a[m]>b[n])
{
c[i]=b[n];
n++;
}
else
{
c[i]=a[m];
m++;
}
}
else if (m==la && la<lb)
{
c[i]=b[n++];
}
else if (n==lb && lb<la)
{
c[i]=a[m++];
}
else
{
if(m<n)
{
c[i]=a[m++];
printf("#");
}
else
{
c[i]=b[n++];
printf("*");
}
}
printf("%3d",c[i]);
i++;
}
getch();
return 0;
}
[ 本帖最后由 我是菜鸟哦 于 2012-7-23 00:09 编辑 ]