我对编程还很陌生;我只学习了几个星期的Python。最近有人给我一个练习,要求我生成一个整数列表,然后在单独的列表中手动将数字从最低到最高排序。
import random
unordered = list(range(10))
ordered = []
lowest = 0
i = 0
random.shuffle(unordered)
lowest = unordered[0]
while i in unordered:
if unordered[i] < lowest:
lowest = unordered[i]
i += 1
if i >= len(unordered):
i = 0
ordered.append(lowest)
unordered.remove(lowest)
lowest = unordered[i]
print(ordered)
这是我到目前为止所拥有的,坦率地说,它根本不起作用。我得到的伪代码是这样的:
- 创建一个空列表来保存有序元素
- While there are still elements in the unordered list
- 将最低变量设置为无序列表中的第一个元素
- For each element in the unordered list
- 将最低的附加到有序列表中
- 从无序列表中删除最低的
- 打印出已排序的列表
到目前为止,我遇到的最大问题是我的计数器无法可靠地为我提供一种从无序列表中挑选出最低数字的方法。然后我在索引列表时遇到问题,即索引超出范围。谁能给我一些关于我哪里出错的反馈?
另外,我得到了这个我不太确定的信息:
您可以使用一种既定的方法对列表进行排序,称为选择排序。
这次我不应该使用 Python 的内置排序方法。这一切都应该手动完成。
您无需创建另一个列表即可执行此操作。
x = [5, 4, 3, 2, 5, 1]
n = len(x)
# Traverse through all list elements
for i in range(n):
# Traverse the list from 0 to n-i-1
# (The last element will already be in place after first pass, so no need to re-check)
for j in range(0, n-i-1):
# Swap if current element is greater than next
if x[j] > x[j+1]:
x[j], x[j+1] = x[j+1], x[j]
print(x)
这适用于重复项和降序列表。它还包括一个小的优化,以避免对最后一个元素进行不必要的比较。
注意:这个答案和所有其他答案都使用冒泡排序,这很简单但效率低下。如果您正在寻求性能,那么使用另一种排序算法会更好。看哪种排序算法是最好的,为什么?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)