在python中手动排序10个整数的列表

新手上路,请多包涵

我对编程还很陌生;我只学习了几周的 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)

这是我目前所拥有的,坦率地说,它根本不起作用。我得到的伪代码是这样的:

  • 创建一个空列表来保存有序元素
  • 虽然无序列表中仍有元素
    • 将变量 lowest 设置为无序列表中的第一个元素
    • 对于无序列表中的每个元素
      • 如果元素低于最低
      • 将该元素的值分配给最低
    • 将最低的追加到有序列表
    • 从无序列表中删除最低的
  • 打印出有序列表

到目前为止,我遇到的最大问题是我的计数器无法可靠地为我提供一种从列表中无序地挑选出最低数字的方法。然后我在为我的列表编制索引时遇到问题,即索引超出范围。谁能给我一些关于我哪里出错的反馈?

另外,我得到了这个我不太确定的信息:

您可以使用一种既定的方法对列表进行排序,称为选择排序。

这次我不应该使用 Python 的内置排序方法。这一切都应该手动完成。谢谢你的帮助!

原文由 Kordan9090 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 655
2 个回答

你刚刚弄错了一些顺序:你需要每次都附加到你的有序列表中

import random
unordered = list(range(10))
ordered = []
i = 0

random.shuffle(unordered)

print unordered
lowest = unordered[0]

while len(unordered) > 0:
    if  unordered[i] < lowest:
        lowest = unordered[i]
    i += 1
    if i == len(unordered):
        ordered.append(lowest)
        unordered.remove(lowest)
        if unordered:
          lowest = unordered[0]
        i = 0

print(ordered)

原文由 colcarroll 发布,翻译遵循 CC BY-SA 3.0 许可协议

您无需创建另一个列表即可执行此操作。

 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)

这适用于重复项和降序列表。它还包括一个小的优化,以避免对最后一个元素进行不必要的比较。

注意:这个答案和所有其他答案都使用冒泡排序,这很简单但效率低下。如果您正在寻找性能,那么使用另一种排序算法会更好。看看 哪个是最好的排序算法,为什么?

原文由 Tyler Hitzeman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题