美文网首页
java合并两个有序的数组

java合并两个有序的数组

作者: Bfmall | 来源:发表于2023-03-23 16:01 被阅读0次

    需求:
    有序数组arr1和arr2,将它们合并成有序数组newArr(递增数组)。

    思路:
    新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置, 每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个集合遍历结束,将另一个集合剩余部分加入新集合中即可.

    代码实现:

    /**
         * 合并两个有序数组,合并后的数组同样按照递增排序
         *
         * @param arr1
         * @param arr2
         */
        public int[] mergeTowArray(int[] arr1, int[] arr2) {
            /**
             * arr1 = {1,3,5};
             * arr2 = {3,6,9};
             */
            if (arr1 == null || arr1.length == 0) {
                return arr2;
            }
            if (arr2 == null || arr2.length == 0) {
                return arr1;
            }
            int num = arr1.length + arr2.length;
            int[] newArr = new int[num];
            int p1 = 0;//arr1的指针
            int p2 = 0;//arr2的指针
            int pTemp = 0;//newArr的指针
            /**
             * 第一次while循环之后结果newMergeArr=[1, 3, 3, 5, 0, 0]
             * 将小的一组arr1数据添加到新数组了,但是大的一组arr2还未完全添加到新数组中
             */
            while (p1 < arr1.length && p2 < arr2.length) {
                if (arr1[p1] <= arr2[p2]) {
                    //如果arr1的元素小于等于arr2的元素,将arr1的元素放入newArr中,将arr1的p1指针+1
                    newArr[pTemp] = arr1[p1];
                    p1 ++;
                } else {
                    //如果arr1的元素大于arr2的元素,将arr2的元素放入newArr中,将arr2的p2指针+1
                    newArr[pTemp] = arr2[p2];
                    p2 ++;
                }
                //每一轮比较之后,将pTemp指针 +1
                pTemp ++;
            }
    
            //将剩余元素添加到newArr数组之后
            while (p1 < arr1.length) {
                    newArr[pTemp] = arr2[p1];
                    pTemp ++;
                    p1 ++;
            }
            //将剩余元素添加到newArr数组之后
            while (p2 < arr2.length) {
                newArr[pTemp] = arr2[p2];
                pTemp ++;
                p2 ++;
            }
            return newArr;
        }
    

    测试代码:

    int[] mergeArr1 = {1,3,5};
    int[] mergeArr2 = {3,6,9};
    int[] newMergeArr = mergeTowArray(mergeArr1, mergeArr2);
    Log.i(TAG, "newMergeArr="+Arrays.toString(newMergeArr));
    

    输出结果:

    newMergeArr=[1, 3, 3, 5, 6, 9]
    

    相关文章

      网友评论

          本文标题:java合并两个有序的数组

          本文链接:https://www.haomeiwen.com/subject/qpmirdtx.html