两个有序数组合并为一个有序数组---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()