2017-01-11 85 views
0

我在試着瞭解bubbleset是如何工作的。我知道這裏有很多關於這個的話題,但是它們都是不同版本的功能,並且對新手解釋不好。我發現在YouTube上冒泡這個簡潔的代碼:python中的bubblesort函數3

def bubblesort(mylist): 
for i in range(0, len(mylist) - 1): 
    for j in range(0, len(mylist) - 1 - i): 
     if mylist[j] > mylist[j+1]: 
      mylist[j], mylist[j+1] = mylist[j+1], mylist[j] 
return mylist 

能有人向我解釋第3行的目的,它說:LEN(MYLIST) - 1 - 我?我們爲什麼要減去i? mylist是做什麼的?

我是一名初學者程序員,試圖更好地理解這些循環如何工作。

+0

這個網站是理解排序算法的好方法https://visualgo.net/sorting – shash678

+1

這是一個非最優實現... –

+0

那麼最佳實現是什麼? –

回答

2

這是因爲在每次迭代之後,最後一個數字被排序。詳細說一下,我們看看這個列表:

[0, 2, 5, 7, 3, 1] 

第一次排序後,最大的數字將被排序。第二次排序後,第二大號碼已排序。或者基本上,索引len(myList) - 1 - iteration上的號碼將被排序,並且位於正確的位置。在第一次排序後,最大的數字已經到位。最大的數字指數現在在len(myList) - 1。然後第二大號碼將正確放置,這iteration從0到1,所以第二大號碼的索引現在是len(myList) - 1 - iterationlen(myList) - 1 - 1,這是在最大號碼之前。

+0

好的,所以我會是迭代號碼。所以每次迭代該數字增加1?因爲最後一個數字已經被排序,所以我們把它放在下一個迭代之外,所以最終它只會在索引0處結束並終止? –

+0

@RyanPostell這是正確的 –

+0

真棒,謝謝! –