[英]Need help understanding bubble sort solution code
所以,我在學習冒泡排序時看到了這段代碼:
def bubblesort(list_a):
indexing_length = len(list_a) - 1
sorted = False
while not sorted:
sorted = True
for i in range(0, indexing_length):
if list_a[i] > list_a[i+1]:
sorted = False
list_a[i], list_a[i+1] = list_a[i+1], list_a[i] # flip position
return list_a
我嘗試在筆記本上運行此代碼,以便更好地理解這一點。 我試了5、2、3、7、10、1、8,過程是這樣的:
--> 2, 5, 3, 7, 10, 1, 8
--> 2, 3, 5, 7, 10, 1, 8
--> 2, 3, 5, 7, 1, 10, 8
--> 2, 3, 5, 7, 1, 8, 10
我最終得到了未排序的數組,因為我認為 for 循環只進行一次迭代。 我理解錯了嗎? 任何人都可以向我解釋一下嗎?
冒泡排序是最簡單的排序算法,如果相鄰元素的順序錯誤,它會重復交換相鄰元素。 這種排序算法也稱為蠻力方法,原因是在排序過程中列表的每個元素都會與同一列表中的每個其他元素進行比較,如果比較的數字不按順序排列,那么它將交換 position。 讓我們看看您的示例列表[5, 2, 3, 7, 10, 1, 8]
。
第一遍:比較0th index(5)
和1st index(2)
, if 0th index(5) > 1st index(2)
,那么它將交換 position 否則不會增加交換計數器。 [ 5 , 2 , 3, 7, 10, 1, 8] 條件True(5 > 2)
, SWAP [ 2 , 5 , 3, 7, 10, 1, 8] ,然后再比較 [2, 5 , 3 , 7, 10, 1, 8] 條件True(5 > 3)
, SWAP [2, 3 , 5 , 7, 10, 1, 8] 等等。
第二遍:
第三關:
第四關:
第五關:
第六關:
第七關:
[1、2、3、5、7、8、10]
def bubbleSort(arr): n = len(arr) for i in range(n): print(arr[i]) for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: print(arr[j], arr[j+1]) arr[j], arr[j + 1] = arr[j + 1], arr[j] print(arr) arr = [5, 2, 3, 7, 10, 1, 8] bubbleSort(arr) print("Sorted array") print(arr)
在for
循環第一次完成后,列表將為[2, 3, 5, 7, 1, 8, 10]
,但sorted
的值為 False。 由於您仍在while not sorted
循環內,因此該循環內的所有內容都將再次運行,包括從索引 0 開始的另一個for
循環。
這將一直持續到for
循環完成時對列表進行排序,因為這將使while
循環的條件為 False。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.