有两个有序数组a,b,现需要将其合并成一个新的有序数组。

  /**
     * 两个有序数组的合并排序
     * (默认2个有序数组都是升序)
     */
    private static void testSortTwoSortedArray() {
        int[] a = {12, 32, 63, 84, 105};
        int[] b = {12, 32, 53, 74, 95};
        int length1 = a.length;
        int length2 = b.length;
        int newArrayLength = length1 + length2;
        int[] result = new int[newArrayLength];
        int i = 0, j = 0, k = 0;   //i:用于标示a数组    j:用来标示b数组  k:用来标示传入的数组
 
        while (i < length1 && j < length2) {
            /* 元素不管重复与否,直接给合并到一起 */
            //if (a[i] <= b[j]) {
            //    result[k++] = a[i++];
            //} else {
            //    result[k++] = b[j++];
            //}
 
            /* 去重复元素,但是空间利用率还是浪费啦,看结果后面有默认的2个0显示 */
            if (a[i] < b[j]) {
                result[k++] = a[i++];
            } else if (a[i] == b[j]) {
                result[k++] = a[i];
                //在某个位置上2个值相等的话,取哪个都一样,
                // 然后这个相等的位置的2个值都可以不用比啦,都直接向后移动1,继续比较
                j++;
                i++;
            } else {
                result[k++] = b[j++];
            }
        }
 
        /* 后面while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入结果数组 */
        while (i < a.length) {
            result[k++] = a[i++];
        }
 
        while (j < b.length) {
            result[k++] = b[j++];
        }
 
        System.out.println(Arrays.toString(result));
    }

测试结果

[12, 32, 53, 63, 74, 84, 95, 105, 0, 0]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容