两个有序数组 A1 A2 的合并

/**
     * 问题6、有序数组 A1 A2 的合并
     */
    @Test
    public void orderArrayMerge() {
        // 两个有序数组 A1 A2 的合并
        int[] A1 = {1, 5, 7, 8, 9, 12, 20, 39, 0, 0, 0, 0, 0, 0, 0};
        int[] A2 = {3, 5, 7, 13, 15, 23, 45};
        int A1A2Index = A1.length - 1;
        int A1Rear = A1.length - A2.length - 1;
        int A2Rear = A2.length - 1;
        while (A2Rear >= 0 && A1Rear >= 0) {
            if (A2[A2Rear] > A1[A1Rear]) {
                // 要插入的数据 可以直接插入
                A1[A1A2Index] = A2[A2Rear];
                A2Rear--;
            } else {
                // 要插入的数据 需要往前插入
                A1[A1A2Index] = A1[A1Rear];
                A1Rear--;
            }
            A1A2Index--;
        }
        for (int num : A1) {
            System.out.println(num);
        }
    // 总结 需要挪动数据的插入 要从后往前插入 时间复杂度0(n)
    }

解决问题的方法要考虑性能,尽可能找到性能最佳的解决方法;

 



posted @ 2017-12-08 18:23  乔胖胖  阅读(632)  评论(0编辑  收藏  举报