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

时间:2014-02-16 20:25:41

标签: python list sorting integer manual

我对编程很新;我已经学习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)

这是我到目前为止所做的,坦率地说,它根本不起作用。我给出的伪代码是:

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

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

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

  

您可以使用既定方法对名为Selection Sort的列表进行排序。

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

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

我发现这对任意数量的输入都很有效

    x = [3, 4, 100, 34, 45]
    for i in range(len(x) - 1):
        if x[i] > x[i + 1]:
            x[i],x[i + 1] = x[i + 1], x[i]
    print (x)

答案 2 :(得分:1)

你不应该创建一个新的排序列表算法,只需实现这个: http://en.wikipedia.org/wiki/Bubble_sort

答案 3 :(得分:0)

如果你有重复的元素,上面的代码将不起作用。

ordered=[]
i=0
j=0
x = [100, 3, 4, 100, 34, 45]
lowest=x[0]
while len(x)>0:
    for i in range(0,len(x)):
        if x[i]<=lowest:
            lowest=x[i]
    ordered.append(lowest)
    x.remove(lowest)
    if len(x)>1:
        lowest=x[0]
print(ordered)

答案 4 :(得分:0)

def sort(x):
    l=len(x)
    for i in range(l):
        for j in range((i+1),l):
            if x[i]>x[j]:
                l1=x[i]
                x[i]=x[j]
                x[j]=l1
    print(x)                
l=[8,4,2,6,5,1,12,18,78,45]
sort(l)

答案 5 :(得分: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)

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

注意:这个答案和所有其他答案都使用冒泡排序,这很简单但是效率很低。如果您正在寻找性能,那么使用另一种排序算法会更好。参见which is best sorting algorithm and why?