没有排序的排序

时间:2013-03-22 19:24:25

标签: python sorting loops

基本上,我想在不使用'sort'的情况下对数字进行排序。 我打算做的是创建一个新列表并将每个Min号放入其中 如:

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

哪个List是输入列表,Min = List [0]和nList = []

如何使用双循环来保持运行?

2 个答案:

答案 0 :(得分:1)

您正在做的事情(逻辑错误除外)仍在排序 - 它被称为heap sort,需要O(n log n)时间。

如果你没有将列表保持为堆,那么你找到的最小值将是O(n)而不是O(log n),你的排序将像冒泡排序一样渐渐地运行 - {{1} }。

答案 1 :(得分: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. 您使用Min启动List[0],尽管这通常不是最小值。这意味着至少你的第一遍将以错误的顺序添加元素。

  3. 最终,item >= Min的每个项目都会List到达{{1}}。那么会发生什么?你永远不会移动任何东西,只是永远无所事事。