2013-03-22 102 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