有序数组合并

来源:互联网 发布:东邪西毒 欧阳锋 知乎 编辑:程序博客网 时间:2024/05/23 01:23

有两个从小到大排序以后的数组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;    }};
0 0
原创粉丝点击