基本上,我要在不使用「排序」號進行排序。 我打算做的是創建一個新的列表,並把每一個最小號到它 如:排序沒有排序
for item in List:
if item < (Min):
Min = item
nList.append(Min)
List.remove(Min)
該列表輸入列表中,最小=列表[0]和NLIST = []
我如何使用雙循環來保持它運行?
基本上,我要在不使用「排序」號進行排序。 我打算做的是創建一個新的列表,並把每一個最小號到它 如:排序沒有排序
for item in List:
if item < (Min):
Min = item
nList.append(Min)
List.remove(Min)
該列表輸入列表中,最小=列表[0]和NLIST = []
我如何使用雙循環來保持它運行?
你的第一個問題是,它只能通過列表,因爲......你寫了for
循環,明確通過列表運行一次,並沒有其他的循環運行一次。
如果你希望它在列表中反覆運行,把另一個循環周圍。
例如,因爲你從原來的列表中的每一次循環中除去值,你可以只繼續下去,直到你全部刪除,加入while List:
爲外環:
while List:
for item in List:
if item < (Min):
Min = item
nList.append(Min)
List.remove(Min)
事實上這並不會過去一樣工作,但那是因爲在原來的邏輯,沒有什麼新的while
循環等缺陷。
第一個明顯的問題是:
你從List
刪除元素,你遍歷它。這是非法的,在技術上什麼事情都可能發生,但究竟會發生的是,你的迭代會跳過一些元素。
您開始Min
與List[0]
,儘管這通常不是最低限度。這意味着至少您的第一次傳球會以錯誤的順序添加元素。
最終你會達到item >= Min
爲List
剩下的每個項目。然後會發生什麼?你永遠不會移動任何東西,只是永遠無所事事。
無論如何,我無法通過我自己的thx找到這些問題。建議? – user1813564 2013-03-22 19:56:47
@ user1813564:您可能想嘗試使用調試器或可視化工具(如[this one](http://pythontutor.com/visualize.html#))逐步瀏覽您的代碼,因爲它運行在一個小的名單。還要看一下簡單的排序算法(比如堆排序)(簡單的排序算法)和插入排序(實際上是完全相反的方法)的簡單實現,並查看它們與您的不同之處。 – abarnert 2013-03-22 20:00:25
請參閱[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
你在做什麼(除了邏輯錯誤)仍在排序 - 它被稱爲heap sort,它需要O(n log n)
時間。
如果你不把列表保存爲堆,你會發現最小值將是O(n)
而不是O(log n)
,並且你的排序將像冒泡排序那樣漸近地運行 - O(n^2)
。
感謝您的回答。我是python新手,所以可能會有一些不清楚的表達。我的意思是使用內置函數排序的機器人。但是真的從你的評論中學到了! – user1813564 2013-03-22 19:47:24
@ user1813564:我認爲你的問題中唯一不清楚的是標點符號。 「排序沒有'排序'」聽起來像你在做一些聰明點; 「排序沒有'sort'」(或者更好,「sorting without sort()'」)清楚地表明你正在討論不使用'sort'方法。 – abarnert 2013-03-22 19:57:06
嗯......你到達列表的末尾? – Ryan 2013-03-22 19:25:46
你沒有邏輯,如果項目>最小 – MattDMo 2013-03-22 19:25:48
沒有其他問題與縮進:) sry傢伙我只是鍵入run.my功能希望找到最小數量,並將其附加到新列表中,並從原來的一個刪除。所以最終會返回一個新的排序列表。但是它發現最小的那個循環後停止。所以問題是如何保持它運行? – user1813564 2013-03-22 19:31:07