有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。
给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。
这道题类似归并排序,合并两个有序的数组,关键是从后向前进行合并,这样不会覆盖前面的值。比较简单,代码如下:
class Merge {
public:
int* mergeAB(int* A, int* B, int n, int m) {
int *i=A+n-1;
int *j=B+m-1;
int *end=A+m+n-1;
while(i-A>=0&&j-B>=0)
{
if(*i>*j)
{
*end=*i;
--i;
--end;
}
else
{
*end=*j;
--j;
--end;
}
}
if(i-A<0)
{
while(j-B>=0)
{
*end=*j;
--j;
--end;
}
}
return A;
}
};