2014-02-16 50 views
1

我對編程相當陌生;我只學了幾周Python。最近我得到了一個練習,要求我生成一個整數列表,然後在單獨的列表中手動將數字從最低到最高排序。手動排序python中的10個整數列表

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) 

這就是我迄今爲止所做的,坦率地說,它根本不起作用。我一直在考慮的僞代碼是這樣的:

  • 創建一個空單持有有序元素
  • 雖然仍處於無序列表
    • 設置一個變量元素,最低至在無序列表
    • 第一元件對於在無序列表
      • 每個元素如果元素是低於最低
      • 指定該元素的值設置爲最低
    • 追加最低到有序列表
    • 取下無序列表最低
  • 打印出來的有序列表

迄今爲止我遇到的最大問題是我的櫃檯不能可靠地給我一種方法來從我的列表中選出無序的最小號碼。然後,我在索引列表時遇到問題,即索引超出範圍。任何人都可以給我一些關於我要出錯的信息嗎?

而且,我得到了這個信息,我真的不知道有關:

您可以使用建立的方法對列表進行排序叫做選擇排序。

我不應該在這次使用Python的內置排序方法。這一切都應該手動完成。謝謝你的幫助!

回答

1

你拿到一些訂單錯誤的:你需要追加到每次您有序列表各地

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) 
+0

感謝JL,這工作就像一個魅力! – Kordan9090

1

我發現這是相當不錯的任何數量的輸入

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) 
+0

對於上面的例子完美地工作正常,但不適用於所有情況。如果數組降序,上面的代碼片段將不起作用 –

0

上面的代碼將不會活像k如果你有重複元素。

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) 
+0

你能解釋一下你的答案嗎? –