基本上,我想在不使用'sort'的情况下对数字进行排序。 我打算做的是创建一个新列表并将每个Min号放入其中 如:
for item in List:
if item < (Min):
Min = item
nList.append(Min)
List.remove(Min)
哪个List是输入列表,Min = List [0]和nList = []
如何使用双循环来保持运行?
答案 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
循环中的任何新内容。
第一个明显的问题是:
您在迭代时从List
删除元素。这是非法的,从技术上讲,任何事情都可能发生,但实际上会发生的事情是你的迭代会跳过一些元素。
您使用Min
启动List[0]
,尽管这通常不是最小值。这意味着至少你的第一遍将以错误的顺序添加元素。
最终,item >= Min
的每个项目都会List
到达{{1}}。那么会发生什么?你永远不会移动任何东西,只是永远无所事事。