📜  如何合并两个已排序的数组 (1)

📅  最后修改于: 2023-12-03 15:24:05.561000             🧑  作者: Mango

如何合并两个已排序的数组

在编程中,我们经常会需要合并两个已排序的数组。下面将介绍几种方法。

方法一:双指针法

双指针法是一种常见的解决合并已排序数组的方法。它需要两个指针分别指向两个数组的起始位置,然后比较两个指针所指的元素,将较小的元素放入合并后的数组中,并将指向该元素的指针向后移动一位,直到一个指针遍历完数组,然后将另一个数组的剩余元素依次加入合并后的数组中。

以下是使用双指针法合并两个已排序数组的 Python 代码:

def merge_sorted_arrays(nums1, nums2):
    m, n = len(nums1), len(nums2)
    i, j = 0, 0
    merged = []
    while i < m and j < n:
        if nums1[i] < nums2[j]:
            merged.append(nums1[i])
            i += 1
        else:
            merged.append(nums2[j])
            j += 1
    if i < m:
        merged += nums1[i:]
    if j < n:
        merged += nums2[j:]
    return merged
方法二:归并排序

归并排序是一种基于分治思想的排序算法,它可以用来合并已排序的数组。该算法将数组一分为二,然后递归地对左半部分和右半部分进行排序和合并,最终得到一个完全排序的数组。

以下是使用归并排序合并两个已排序数组的 Python 代码:

def merge_sorted_arrays(nums1, nums2):
    def merge(nums1, nums2):
        i, j = 0, 0
        merged = []
        while i < len(nums1) and j < len(nums2):
            if nums1[i] < nums2[j]:
                merged.append(nums1[i])
                i += 1
            else:
                merged.append(nums2[j])
                j += 1
        if i < len(nums1):
            merged += nums1[i:]
        if j < len(nums2):
            merged += nums2[j:]
        return merged

    def merge_sort(nums):
        if len(nums) <= 1:
            return nums
        mid = len(nums) // 2
        left = merge_sort(nums[:mid])
        right = merge_sort(nums[mid:])
        return merge(left, right)

    return merge_sort(nums1 + nums2)

以上是两种合并已排序数组的常用方法,程序员在处理已排序数组时,以上方法将会非常有用。