如何在不使用sort函数的情况下将两个列表合并到一个排序列表?

时间:2016-11-09 05:46:29

标签: python sorting

def merge(L1, L2):
'''(list of int, list of int) -> (list of int)

Return a list of ints sorted in increasing order that is 
the merge of the given sorted lists of integers.

>>> merge([1, 2, 4], [3, 5])
[1, 2, 3, 4, 5]

'''
new_lst = []
i = 0

while i < len(L1):
    for item in L2:
        if L1[i] < item:
            new_lst.append(L1[i])
            new_lst.insert(i + 1, item)
            i += 1

return new_lst

这是我的工作,但是当我运行示例时,它会显示

merge([1, 2, 4], [3, 5])
[1, 3, 5, 5, 2, 4]

我想知道我的代码有什么问题?谢谢!

1 个答案:

答案 0 :(得分:1)

您不必为另一个列表的每个元素迭代一个完整列表。相反,您的基本操作应该是查看每个列表中的当前元素,并将较小的元素追加到新列表中。继续这样做,直到你用完一个列表中的元素,然后追加其他列表中的所有剩余元素。

您的问题类似于课堂作业,所以我不想发布代码。但是,这是一个大纲。您将需要两个索引计数器,每个列表一个。您的while循环应该迭代,而两个计数器都短于相应的列表长度(例如while i < len(L1) and j < len(L2):)。当循环退出时,其中一个计数器仍然比其相应的列表短,所以只需运行第二个循环来附加所有剩余的元素。