合并K个有序数组-Java

package com.rao.algorithm;

import java.util.Arrays;

/**
 * @author Srao
 * @className MergeK
 * @date 2019/12/20 23:24
 * @package com.rao.algorithm
 * @Description 合并K个有序数组
 */
public class MergeK {

    public static int[] merge(int[] arr1, int[] arr2){
        int length1 = arr1.length;
        int length2 = arr2.length;

        int[] arr = new int[length1 + length2];
        int j = 0;
        int k = 0;
        int i = 0;
        while (j < length1 && k < length2){
            if (arr1[j] <= arr2[k]){
                arr[i] = arr1[j];
                i++;
                j++;
            }else {
                arr[i] = arr2[k];
                i++;
                k++;
            }
        }

        //把还没有进行合并的元素直接添加到新数组的后面
        while (j < length1){
            arr[i] = arr1[j];
            i++;
            j++;
        }
        while (k < length2){
            arr[i] = arr2[k];
            i++;
            k++;
        }

        return arr;
    }

    public static void main(String[] args) {
        int[] arr1 = {1,3,5,6};
        int[] arr2 = {1,2,5,7};
        int[] arr3 = {3,6,9,11};
        int[] arr4 = {5,7,13,17};

        int[] merge1 = merge(arr1, arr2);
        int[] merge2 = merge(arr3, arr4);
        int[] merge = merge(merge1, merge2);
        System.out.println(Arrays.toString(merge));
    }
}

和归并排序的思想差不多,归并排序也用到了合并有序数组

猜你喜欢

转载自www.cnblogs.com/rao11/p/12075578.html