2016-11-06 89 views
1

我對這段代碼的工作原理感到困惑。瞭解Python中的氣泡排序

假設列表的輸入是[C,B,A,退出]。

在第一個「爲」語句,它會掉周圍的列表中的位置0和1,這是C和B

這將導致與[B,C,A]一個新的列表

但是,爲什麼在第二組「for」語句中,它將圍繞A和B進行交換而不是C和A?這可以在照片中看到輸出表示將交換B和A的圖片。我很困惑,爲什麼它應該使用列表的位置1和2來代替。

我試過手動追蹤代碼,我總是得到C和A應該交換。有人可以幫我解釋一下嗎?非常感謝你提前

def bubble(alist): 
    count = 0 
    count2 = 0 
    for length in range(len(list)): 
     for i in range(len(list) - 1): 
      if list[i] > list[i + 1]: 
       print("Swapping", list[i + 1], list[length]) 
       tmp = list[length] 
       list[length] = list[i+1] 
       list[i + 1] = tmp 

list = [] 
while True: 
    val = input() 
    if val == "exit": 
     break 
    list.append(val) 

counts = bubble(list) 
print(list) 

圖片輸出 Picture of the output

回答

0

你比較

if list[i] > list[i + 1]: 

不符合您的交換代碼

tmp = list[length] 
list[length] = list[i+1] 
list[i + 1] = tmp 

要麼改變你compari兒子

if list[i + 1] > list[length] 

或更改交換代碼

tmp = list[i + 1] 
list[i + 1] = list[i] 
list[i] = tmp 

此外,你應該永遠不會使用list作爲變量名,因爲它是一個built-in type

+0

啊。謝謝!。我想我現在明白了! – HiDanny