2016-05-18 38 views
0

所以我應該帶上一個數字n,在列表中加n個數字,然後對列表進行排序並打印。這個排序代碼有什麼問題? Python

numCol=int(input()); 
vals=[]; 
for x in range(numCol): 
    vals.append(int(input())) 

for x in range(len(vals)): 
    curr=vals[x]; 
    for y in range(x+1,len(vals)): 
     if(curr>vals[y]): 
      temp=vals[y]; 
      vals[y]=curr; 
      vals[x]=temp; 
print(vals); 

該代碼無法正常工作。我們還沒有徹底地學過排序算法,所以我只是自己做了,但它類似於我認爲的選擇排序。無論如何,爲什麼它不按升序打印值?

編輯:我輸入4,然後使列表4,3,2,1輸出是[1,4,4,4]

+0

提供樣品的輸入,實際輸出與預期輸出 – piyushj

+0

這只是做一次通過列表...你需要繼續下去,直到你做不交換...你也可以用vals [x],vals [y] = vals [y],vals [x]'交換python –

+0

你需要實現一個排序算法嗎?因爲實際的答案是使用內置的Python排序方法 – deceze

回答

1

問題是curr交換後應該改變。

for x in range(len(vals)): 
    curr=vals[x]; 
    for y in range(x+1,len(vals)): 
     if(curr > vals[y]): 
      temp = vals[y] 
      vals[y] = curr 
      vals[x] = temp 
      curr = vals[x] # <-- 
+0

謝謝!這樣做!我會如何合併curr,相應地更新? – Thandor7765

+0

@DCh根據你的代碼,'curr'是'vals [x]'的值,所以無論vals [x]'變化,相應地更新'curr'。 – delta

+0

ahhhhhhhh謝謝! – Thandor7765

0

可以解決列表更容易,更Python的方式排序,只需使用sort命令,這裏有一個例子:

import random 

a=random.sample(range(30), 10) 
print a 
a.sort() 
print a 
+0

謝謝!這只是爲了這個問題,我們不能使用內置算法 – Thandor7765

1

變化的這部分代碼

for x in range(len(vals)): 
    curr=vals[x]; 
    for y in range(x+1,len(vals)): 
     if(curr>vals[y]): 
      temp=vals[y]; 
      vals[y]=curr; 
      vals[x]=temp; 

To:

for x in range(len(vals)): 
    for y in range(x+1,len(vals)): 
     if(vals[x]>vals[y]): 
      temp=vals[y]; 
      vals[y]=vals[x]; 
      vals[x]=temp; 
+0

甜!非常感謝 – Thandor7765

0

Yo我很歡迎 -

numCol=int(input()); 
vals=[]; 
for x in range(numCol): 
    vals.append(int(input())) 

for x in range(len(vals)): 
    for y in range(x+1,len(vals)): 
    if(vals[x]>vals[y]): 
     temp=vals[y] 
     vals[y]=vals[x] 
     vals[x]=temp 
print(vals) 

問題是你沒有改變cur的值來正確比較。

編輯 - 剛剛看到其他的答案不得不打我給它:(