簡體   English   中英

冒泡排序:理解遞歸

[英]Bubble sort: understanding recursion

我是編程和數據結構和算法的新手。 我了解程序,我不明白的是為什么它會遞歸地做我想做的事? 我想我要問的是為什么它在通過列表一次后沒有停止? 它一直持續到整個列表被排序。

def bubblesort(numbers):
    for i in range(len(numbers)):
        for j in range(len(numbers) - 1):
            if(numbers[j] > numbers[j+1]):
                temp = numbers[j]
                numbers[j] = numbers[j+1]
                numbers[j+1] = temp

有兩個循環。 對於外循環的每次迭代,內循環都會遍歷整個列表。

現在注意這一點:

內部循環將保證最大的價值“冒泡”——隨着它參與的每一次交換——到最右邊。 所以在這個內部循環第一次完成之后,最大值將到達它的最終位置。

這個內部循環第二次重新啟動時,我們可以想象列表要短一個元素:想象最右邊(即最大)的值不存在。 然后我們有一個類似的情況:現在的最大值肯定會移到最右邊。 內部循環還將這個“最大”值與我們忽略的值(實際上位於最右邊)進行比較,但顯然它們不會被交換。 因此,在第二次內部循環遍歷之后,我們在最右邊有兩個最大值,在它們的最終 position 中。

所以,這里有一個模式。 如果內部循環(全部)執行 10 次,那么最后我們將在最右邊獲得最大的 10 個值。 這就是為什么循環進行與列表中的值一樣多的迭代。 這樣可以保證我們將對整個列表進行排序。

好吧,如果我的問題正確,那么您要理解的重點是為什么您的代碼會多次運行您的列表,而不是只運行一次,對嗎?

你有一個 for 在另一個里面,這樣,在第 2 行你開始了一個循環,它將穿過數字數組。 對於第一個循環的每次重復,您都在第 3 行執行另一個循環,因此,每次您在第 2 行運行數組時,您都會在第 3 行再次運行它。

這是冒泡排序的主要問題之一,即使在排序后,您仍將繼續運行數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM