[英]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.