跳到主要内容

简述Java实现有序数组合并 ?

参考答案:

在Java中,有多种方法可以实现有序数组合并。以下是一种简单且直观的方法,使用了Java的Arrays.sort()函数进行排序后合并,但这种方法在大数据集上可能效率不高。另一种更高效的方法是使用双指针技术,该技术在合并两个有序数组时无需进行排序。

方法一:排序后合并

import java.util.Arrays;

public class MergeSortedArrays {
    public static void main(String[] args) {
        int[] arr1 = {1, 3, 5, 7};
        int[] arr2 = {2, 4, 6, 8};
        int[] mergedArr = mergeSortedArrays(arr1, arr2);
        System.out.println(Arrays.toString(mergedArr));  // 输出:[1, 2, 3, 4, 5, 6, 7, 8]
    }

    public static int[] mergeSortedArrays(int[] arr1, int[] arr2) {
        int[] mergedArr = new int[arr1.length + arr2.length];
        System.arraycopy(arr1, 0, mergedArr, 0, arr1.length);
        System.arraycopy(arr2, 0, mergedArr, arr1.length, arr2.length);
        Arrays.sort(mergedArr);
        return mergedArr;
    }
}

方法二:双指针技术

public class MergeSortedArrays {
    public static void main(String[] args) {
        int[] arr1 = {1, 3, 5, 7};
        int[] arr2 = {2, 4, 6, 8};
        int[] mergedArr = mergeSortedArrays(arr1, arr2);
        System.out.println(Arrays.toString(mergedArr));  // 输出:[1, 2, 3, 4, 5, 6, 7, 8]
    }

    public static int[] mergeSortedArrays(int[] arr1, int[] arr2) {
        int[] mergedArr = new int[arr1.length + arr2.length];
        int i = 0, j = 0, k = 0;

        // 比较两个数组的元素,并将较小的元素放入mergedArr中
        while (i < arr1.length && j < arr2.length) {
            if (arr1[i] < arr2[j]) {
                mergedArr[k++] = arr1[i++];
            } else {
                mergedArr[k++] = arr2[j++];
            }
        }

        // 将剩余的元素(如果有的话)放入mergedArr中
        while (i < arr1.length) {
            mergedArr[k++] = arr1[i++];
        }
        while (j < arr2.length) {
            mergedArr[k++] = arr2[j++];
        }

        return mergedArr;
    }
}

第二种方法的时间复杂度为O(n+m),其中n和m分别是两个输入数组的长度,因为它只遍历了这两个数组一次。而第一种方法的时间复杂度为O((n+m)log(n+m)),因为Arrays.sort()函数的时间复杂度通常为O(nlogn)。因此,对于大数据集,第二种方法通常更有效率。