合并两个有序数组,合并之后依然有序

合并两个有序数组,合并之后依然有序

题目很简单,就是两个有序数组,合并成一个,合并完了要依然有序。朋友面试的时候问到了,自己闲的没事敲一下,可以优化的版本。

/**
 * @program: test
 * @description: 两个有序数组合并成一个有序数组
 * @author: YangHang
 * @create: 2019-08-24 20:33
 **/

public class ArraySort {

    public static void main(String[] args) {

        // 定义两个有序数组
        int[] arr1 = {1, 4, 5, 12, 32, 198};
        int[] arr2 = {2, 3, 15, 112, 132};

        // 合并之后的数组
        int[] mergeArr = new int[arr1.length + arr2.length];

        // 数组1的索引
        int index_arr1 = 0;
        // 数组2的索引
        int index_arr2 = 0;
        // 合并之后数组的索引
        int index_merge = 0;

        for (int i = 0; i < mergeArr.length; i++) {

            // 如果数组1或者数组2已经合并完了,剩下的直接合并另外一个就好了,就不用比较了。
            if (index_arr1 == arr1.length) {
                for (int j = index_arr2; j < arr2.length; j++) {
                    mergeArr[index_merge++] = arr2[index_arr2++];
                }
                break;
            } else if (index_arr2 == arr2.length) {
                for (int j = index_arr1; j < arr1.length; j++) {
                    mergeArr[index_merge++] = arr1[index_arr1++];
                }
                break;
            }

            if (arr1[index_arr1] <= arr2[index_arr2]) {
                mergeArr[i] = arr1[index_arr1];
                index_arr1++;
            } else {
                mergeArr[i] = arr2[index_arr2];
                index_arr2++;
            }

            index_merge++;
        }

        // print
        System.out.println(Arrays.toString(mergeArr));
    }

}

你可能感兴趣的:(算法)