2016-11-06 4 views
1

Я действительно смущен тем, как работает этот код.Понимание Bubble Sort в Python

Предположим, что входы для списка - [C, B, A, exit].

На первый "за" заявление, оно будет поменять по списку позиций 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