解题思路
体育课上有A、B两个班,A班m个人,B班n个人;
两个班都按从矮到高的顺序排列好;
现在有充足的板凳;
老师走向第i号板凳:
- 如果A班无人则B班最前面的同学入座
- 如果B班无人则A班最前面的同学入座
- 如果都有人则比较最前面的同学的升高,矮个子的同学入座
- 如果此时操场还有人未入座,老师走向i+1号板凳
代码
void merge(int* A, int ASize, int m, int* B, int BSize, int n){
int pa = 0;
int pb = 0;
int C[m+n];
for(int i = 0 ; (pa < m || pb < n) ; i++)
{
if(pa == m)
{
C[i] = B[pb];
pb++;
continue;
}
if(pb == n)
{
C[i] = A[pa];
pa++;
continue;
}
if(A[pa] > B[pb])
{
C[i] = B[pb];
pb++;
continue;
}
if(A[pa] <= B[pb])
{
C[i] = A[pa];
pa++;
continue;
}
}
for(int i = 0 ; i < m+n ; i++)
{
A[i] = C[i];
}
}