Python:不能在O(n)中首先合并排序的两个排序列表

时间:2014-11-24 18:06:34

标签: python sorting

我有这段代码:

def msort(l1,l2):   

    new=[]
    x=0
    for item in l1:
        if l1[x]>l2[x]:
            new.append(l1[x])
            l1.remove(l1[x])
        elif l2[x]>l1[x]:
            new.append(l2[x])
            l2.remove(l2[x])
        else:
            new.append(l1[x])
            new.append(l2[x])
            l1.remove(l1[x])
            l2.remove(l2[x])
        x+=1
    print(new)

我希望它打印出来:

>>> ssort([9,5,3,2,1],[6,5,4,1])
    [9,6,5,5,4,3,2,1,1]

但我把它作为我的输出:

[9, 5, 2]

为什么?我该怎么办呢?我不允许使用任何排序的函数,它必须是O(n)。我试着看看列表中的前两个项目,追加更大的一个,摆脱它,然后再次执行,直到列表为空,但它似乎没有工作。列表已经从最大数字开始排序。

感谢。

1 个答案:

答案 0 :(得分:1)

你没有保持' x'与两个列表中的位置同步。 这表明,使用此代码,您需要两个索引,每个列表一个。

理解你的代码无法正常工作的一个好方法是抓住一个套牌 卡片,创建两个分类的迷你甲板,比如说10张牌,然后走路 通过你的算法。新旧套牌涵盖l1l2new, 所以你需要铅笔和纸来跟踪其他变量的值, 在这种情况下x。您很快就会发现问题。