2014-11-24 40 views
-1

我有這樣的代碼:的Python:不能在O(n)的開始歸併排序兩個排序列表中最大的第一

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)。我試圖查看列表中的前2項,追加更大的項目,擺脫它,然後再做,直到列表爲空,但似乎沒有工作。列表已經從最大數量下降開始排序。

謝謝。

+0

你應該做一些調試。 – 2014-11-24 18:08:26

+0

你不能修改你正在迭代的數組(或者說,你可以,但是你不會得到預期的結果)。 – 2014-11-24 18:09:42

+0

好的。我將如何修復我的?製作每個列表的另一個副本? – Sawyer 2014-11-24 18:10:46

回答

1

您不保持'x'與兩個列表中的位置同步。 這表明,使用此代碼,您需要兩個索引,每個列表一個索引。

理解你的代碼不工作的一個好方法是獲取一張卡牌 ,通過你的算法創建兩個排序的小卡片,比如說10張卡片,然後走 。新舊套牌包括l1,l2new, 因此您需要鉛筆和紙張來跟蹤其他變量的值 ,在這種情況下爲x。你會很快看到問題。

+0

有幫助,謝謝! – Sawyer 2014-11-24 18:46:05

相關問題