题解 | #合并两个有序的数组#

合并两个有序的数组

http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665

题目描述:
给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
1.可以假设 数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为 和 的数组空间大小为 
2.不要返回合并的数组,返回是空的,将数组 的数据合并到里面就好了
3.数组在[0,m-1]的范围也是有序的

解法一:暴力法(不推荐)
将B中所有元素直接插入A的尾部,再用选择排序将A中元素从小到大进行排序
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        for(int i=0;i<n;i++)
            A[m+i]=B[i];
        for(int i=0;i<m+n-1;i++)
            for(int j=i+1;j<m+n;j++)
                if(A[i]>A[j])
                {
                    int temp=A[i];
                    A[i]=A[j];
                    A[j]=temp;
                }
    }
};
解法二:倒序插入法
从A与B的尾部开始逐个比较,较大者插入A的尾部,较小者留下继续进行比较,保证所有数据均被插入
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int temp=m+n-1;
        m--;
        n--;
        while(m>=0&&n>=0)
        {
            if(A[m]>B[n]) A[temp--]=A[m--];
            else A[temp--]=B[n--];
        }
        while(n>=0) A[temp--]=B[n--];
    }
};

全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务