两个有序数组合并

引言

将两个已经排好序的数组进行合并,使得合并后的数组也是有序
示例:

        int a[] = {1, 3, 5, 11, 20};
        int b[] = {1, 2, 3, 4, 7, 8, 11, 25, 30};

排好序的结果

1  1  2  3  3  4  5  7  8  11  11  20  25  30  

代码

public class MergeArray {
    public static int[] mergeSortedArrays(int a[], int b[]) {
        //如果其中一个长度为0,直接返回另外一个数组
        if (a.length == 0) {
            return Arrays.copyOf(b, b.length);
        }
        if (b.length == 0) {
            return Arrays.copyOf(a, a.length);
        }
        //合并后的结果
        int[] c = new int[a.length + b.length];
        //i:a[]的索引位置
        //j:b[]的索引位置
        //k:c[]的索引位置
        int i = 0, j = 0, k = 0;
        while (true) {
            //如果c已经被填充满了,则已经排好充了,直接退出循环返回即可
            if (k == c.length) {
                break;
            }
            //当其中一个数组已经被扫描完了,直接将另外一个数组当前位置上的数据拷贝到c上
            if (i == a.length) {
                c[k++] = b[j++];
                continue;
            }
            //当其中一个数组已经被扫描完了,直接将另外一个数组当前位置上的数据拷贝到c上
            if (j == b.length) {
                c[k++] = a[i++];
                continue;
            }
            //将小的那一个拷贝到c当前位置上
            if (a[i] < b[j]) {
                c[k++] = a[i++];
            } else {
                c[k++] = b[j++];
            }
        }
        return c;
    }
    public static void printArray(int[] array) {
        if (array == null) {
            return;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + "  ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        //将两个已排序的数组进行合并,合并后的数组也是有序的
        int a[] = {1, 3, 5, 11, 20};
        int b[] = {1, 2, 3, 4, 7, 8, 11, 25, 30};
        
        System.out.println("a: ");
        printArray(a);
        System.out.println("b: ");
        printArray(b);
        System.out.println("merge: ");
        printArray(mergeSortedArrays(a, b));

    }
}
posted @ 2021-05-13 14:59  心若向阳花自开  阅读(276)  评论(0编辑  收藏  举报