合并排序的数组,时间复杂度为(m+n)

给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。

初始化 A 和 B 的元素数量分别为 m 和 n。

示例:

输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

class Solution {
public void merge(int[] A, int m, int[] B, int n) {
    //假如A中没有元素
    if(m==0){
        System.arraycopy(B,0,A,0,n);
        return;
    }
    //假如B中没有元素
    if(n==0){
        return;
    }
    //记录A位置的倒序索引
    int index_a=m-1;
    //记录B位置的倒序索引
    int index_b=n-1;
    //记录A与B合并所需要的空间
    int index=m+n-1;
    //当两者都不为空的时候进行比较
    while(index_a>=0&&index_b>=0){
        //将两者比较中较大的数,赋给新的位置,并且把逆向索引-1
        if(A[index_a]>=B[index_b]){
            A[index--]=A[index_a--];
        }else{
            A[index--]=B[index_b--];
        }
    }
    //当index_a>0时,证明此时A数组没有遍历完全,但是无需处理,因为数组A本身有序。
    //当index_b>0时,此时B没有完全遍历,将其遍历赋值完全即可。
    while(index_b>=0){
        A[index--]=B[index_b--];
    }
}
}
发布了9 篇原创文章 · 获赞 1 · 访问量 302

猜你喜欢

转载自blog.csdn.net/ShangDiYeGuJi/article/details/104629193
今日推荐