两个递增的有序数组二路归并成一个递增的数组

/**
 * @author:(LiberHome)
 * @date:Created in 2019/2/27 16:49
 * @description:实现二路归并排序
 * @version:$page03
 */
/*已知有两个递增的有序数组,将它们合并为一个有序数组*/
public class page03 {
    public static void main(String[] args) {
        int[] num00 = {1, 3, 77, 7866};
        int[] num01 = {0, 0, 56, 344, 456, 24455};
        int[] numResult;
        numResult = mergeArray(num00, num01);
        show(numResult);
    }

    private static void show(int[] numResult) {
        for (int i = 0; i < numResult.length; i++) {
            System.out.print(" " + numResult[i]);
        }
    }

    private static int[] mergeArray(int[] num0, int[] num1) {
        /*获取结果数组长度*/
        int size = num0.length + num1.length;
        /*新建一个结果数组*/
        int[] answer = new int[size];
        /*首先从2个数组的第一个元素开始比较,较小的进入结果数组*/
        int i = 0;
        int j = 0;
        int k = 0;
        while (i < num0.length && j < num1.length) {
            int smaller = (num0[i] < num1[j] ? num0[i++] : num1[j++]);
            answer[k++] = smaller;
        }
        /*如果数组num0的所有元素都进入结果数组,数组num1未完全进入*/
        if (i == num0.length && j < num1.length) {
            /*数组num1剩下的元素全部直接接到结果数组后面*/
            for (int m = j; m < num1.length; m++) {
                answer[k++] = num1[m];
            }
        }
        /*如果数组num1的所有元素都进入结果数组,数组num0未完全进入*/
        if (j == num1.length && i < num0.length) {
            /*数组num0剩下的元素全部直接接到结果数组后面*/
            for (int n = i; n < num0.length; n++) {
                answer[k++] = num0[n];
            }
        }
        /*返回结果数组*/
        return answer;
    }
}

猜你喜欢

转载自www.cnblogs.com/liberhome/p/10445521.html