合并 2 个有序列表(关键词:有序列表/有序/合并/归并)

版权声明:本文为博主原创文章,可以转载,但转载前请联系博主。 https://blog.csdn.net/qq_33528613/article/details/84892794

合并 2 个有序列表

递归算法

非递归算法

实现

def merge(a, b):
        A = 0
        B = 0
        res = []

        while A <= len(a)-1 and B <= len(b)-1:
                if a[A] <= b[B]:
                        res.append(a[A])
                        A += 1
                else:
                        res.append(b[B])
                        B += 1

        if A == len(a):
                res.extend(b[B:])
        if B == len(b):
                res.extend(a[A:])

        return res

测试

def test():
        l1 = [1,4,5]
        l2 = [2,3,6,7]
        l3 = [2,3]
        l4 = [7,9]

        assert merge(l1, l2)    == [1,2,3,4,5,6,7]
        assert merge(l1, l3)    == [1,2,3,4,5]
        assert merge(l1, l4)    == [1,4,5,7,9]
        assert merge([], [])    == []
        assert merge([], [1,4]) == [1,4]

        print('All testcases pass!')


if __name__ == '__main__':
        test()

结果:

$ python3 t.py
All testcases pass!

参考文献

  1. 8 合并两个有序列表
  2. https://github.com/henry199101/sort/blob/master/merge_sort.py;
  3. 排序算法之归并排序
  4. 这是印象笔记中的笔记,如果是在CSDN手机APP上查看此博客,请在印象笔记手机APP中搜索该参考文献:归并排序
  5. https://leetcode.com/problems/merge-sorted-array/description/;
  6. 这是印象笔记中的笔记,如果是在CSDN手机APP上查看此博客,请在印象笔记手机APP中搜索该参考文献:088. (合并 有序数组)Merge Sorted Array

猜你喜欢

转载自blog.csdn.net/qq_33528613/article/details/84892794