题目:
两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。
请编写一个方法,将B合并入A并排序。
给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。
思路:从后向前逐个比较填充A数组。
贴代码:
int cmpMax(int a, int b)
{
return (a > b) ? a : b;
}
// n为数组A的真实长度
// m为数组B的真实长度
int* mergeAB(int* A, int* B, int n, int m)
{
int max = cmpMax(A[n - 1], B[m - 1]);
int mxlen = cmpMax(n, m);
int Adx = n - 1;
int Bdx = m - 1;
int cnt = n + m - 1;
while (cnt >= 0)
{
// 从后往前填充
if (Adx >= 0 && Bdx >= 0)
{
A[cnt] = cmpMax(A[Adx], B[Bdx]);
if (A[cnt] == A[Adx])
{
Adx--;
}
else if (A[cnt] == B[Bdx])
{
Bdx--;
}
}
else if(Adx < 0)
{
A[cnt] = B[Bdx--];
}
else if(Bdx < 0)
{
A[cnt] = A[Adx--];
}
cnt--;
}
return A;
}