2013-03-22 105 views
0

基本上,我要在不使用「排序」號進行排序。 我打算做的是創建一個新的列表,並把每一個最小號到它 如:排序沒有排序

for item in List: 
    if item < (Min): 
     Min = item 
     nList.append(Min) 
     List.remove(Min) 

該列表輸入列表中,最小=列表[0]和NLIST = []

我如何使用雙循環來保持它運行?

+1

嗯......你到達列表的末尾? – Ryan 2013-03-22 19:25:46

+1

你沒有邏輯,如果項目>最小 – MattDMo 2013-03-22 19:25:48

+0

沒有其他問題與縮進:) sry傢伙我只是鍵入run.my功能希望找到最小數量,並將其附加到新列表中,並從原來的一個刪除。所以最終會返回一個新的排序列表。但是它發現最小的那個循環後停止。所以問題是如何保持它運行? – user1813564 2013-03-22 19:31:07

回答

1

你的第一個問題是,它只能通過列表,因爲......你寫了for循環,明確通過列表運行一次,並沒有其他的循環運行一次。

如果你希望它在列表中反覆運行,把另一個循環周圍。

例如,因爲你從原來的列表中的每一次循環中除去值,你可以只繼續下去,直到你全部刪除,加入while List:爲外環:

while List: 
    for item in List: 
     if item < (Min): 
      Min = item 
      nList.append(Min) 
      List.remove(Min) 

事實上這並不會過去一樣工作,但那是因爲在原來的邏輯,沒有什麼新的while循環等缺陷。

第一個明顯的問題是:

  1. 你從List刪除元素,你遍歷它。這是非法的,在技術上什麼事情都可能發生,但究竟會發生的是,你的迭代會跳過一些元素。

  2. 您開始MinList[0],儘管這通常不是最低限度。這意味着至少您的第一次傳球會以錯誤的順序添加元素。

  3. 最終你會達到item >= MinList剩下的每個項目。然後會發生什麼?你永遠不會移動任何東西,只是永遠無所事事。

+0

無論如何,我無法通過我自己的thx找到這些問題。建議? – user1813564 2013-03-22 19:56:47

+0

@ user1813564:您可能想嘗試使用調試器或可視化工具(如[this one](http://pythontutor.com/visualize.html#))逐步瀏覽您的代碼,因爲它運行在一個小的名單。還要看一下簡單的排序算法(比如堆排序)(簡單的排序算法)和插入排序(實際上是完全相反的方法)的簡單實現,並查看它們與您的不同之處。 – abarnert 2013-03-22 20:00:25

+1

請參閱[this visualization](http://pythontutor.com/visualize.html#code=List+%3D+%5B3,+2,+1,+0,+1,+2,+3%5D%0AMin,+ NLIST +%3D +列表%5B0%5D,+%5B%5D%0A%0Afor +項目+在+列表%3A%0A ++++如果+項目+%3C +(最小值)%3A%0A +++++ +++閔+%3D +項%0A ++++++++ nList.append(最小值)%0A ++++++++ List.remove(最小值)&模式=顯示&累積=假heapPrimitives =假drawParentPointers =假textReferences = false&py = 2&curInstr = 19)來查看你的代碼如何處理'[3,2,1,0,1,2,3]',這表明了所有3個問題。在移動'2'後,'1'被跳過。然後,在'2'之後加上'0',而不是之前。 '0'之後,沒有其他東西被添加。 – abarnert 2013-03-22 20:05:36

1

你在做什麼(除了邏輯錯誤)仍在排序 - 它被稱爲heap sort,它需要O(n log n)時間。

如果你不把列表保存爲堆,你會發現最小值將是O(n)而不是O(log n),並且你的排序將像冒泡排序那樣漸近地運行 - O(n^2)

+0

感謝您的回答。我是python新手,所以可能會有一些不清楚的表達。我的意思是使用內置函數排序的機器人。但是真的從你的評論中學到了! – user1813564 2013-03-22 19:47:24

+1

@ user1813564:我認爲你的問題中唯一不清楚的是標點符號。 「排序沒有'排序'」聽起來像你在做一些聰明點; 「排序沒有'sort'」(或者更好,「sorting without sort()'」)清楚地表明你正在討論不使用'sort'方法。 – abarnert 2013-03-22 19:57:06