两个有序数组合并为一个有序数组---python

def merge(a, b):
    """
    合并2个有序数组,默认a,b都是从小到大的有序数组
    """
    # 1.临时变量
    i, j = 0, 0  # 分别标记2个数组的起始位置
    na, nb = len(a), len(b)  # 分别标记2个数组的长度
    temp = []  # 临时存放空间
    # 2.只要2个数组不为空:比较大小a[i]a[j],依次填入temp
    while i <= na - 1 and j <= nb - 1:
        if a[i] <= b[j]:
            temp.append(a[i])
            i += 1
        else:
            temp.append(b[j])
            j += 1
    # 3.判断哪个数组还有剩余
    if i <= na - 1:
        start = i
        end = na - 1
        # 4.将剩余部分添加到temp中
        temp.extend(a[start:end + 1])
    else:
        start = j
        end = nb - 1
        temp.extend(b[start:end + 1])
    # 5.返回合并的新数组
    return temp

if __name__ =='__main__':
    a = [1, 2, 4, 6, 9]
    b = [5, 8, 10, 22]
    mergeArr = merge(a, b)
    print(mergeArr)

方法二:
def merge_sort(nums1, nums2):
    m = []
    i, j = 0, 0
    l_1, l_2 = len(nums1)-1, len(nums2)-1
    # 当i,j的索引位置小于等于索引最大值的时候
    while i <= l_1 and j <= l_2:
        if nums1[i] <= nums2[j]:
            m.append(nums1[i])
            i += 1
        else:
            m.append(nums2[j])
            j += 1
    m = m + nums1[i:] + nums2[j:]
    return m
if __name__ == '__main__':
    n1 = [1, 2, 3, 4, 5]
    n2 = [2, 4, 5, 6, 7]
    m = merge_sort(n1, n2)
    print(m)
    # [1, 2, 2, 3, 4, 4, 5, 5, 6, 7]

方法三:

也可以使用Python中的列表方法pop()来进行,只比较每个数组的第一位就可以,每次将两者小的一个数弹出添加到新的列表中,直到有一个列表为空:

def merge_sort(nums1, nums2):
    m = []
    i, j = 0, 0
    while nums1 and nums2:
        if nums1[i] <= nums2[j]:
            temp = nums1.pop(i)
            m.append(temp)
        else:
            temp = nums2.pop(j)
            m.append(temp)

    m = m + nums1 + nums2
    return m

方法四

def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        for num in nums2:
            nums1[m] = num
            m += 1
        nums1.sort()

 

 

posted @ 2020-03-11 22:55  图图图图胡图图  阅读(899)  评论(0编辑  收藏  举报