解题思路

体育课上有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];
    }

}