簡體   English   中英

需要幫助理解冒泡排序解決方案代碼

[英]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] 等等。

  • [2, 3, 5, 7, 10 , 1 , 8] 真(10>1)。
  • [2, 3, 5, 7, 1, 10 , 8 ] 真(10>8)。
  • [2、3、5、7、1、8、10]

第二遍:

  • [2、3、5、7、1、8、10]
  • [2、3、5、7、1、8、10]
  • [2, 3, 5, 7 , 1 , 8, 10] 真(7>1)。
  • [2、3、5、1、7、8、10]
  • [2、3、5、1、7、8、10]

第三關:

  • [2、3、5、1、7、8、10]
  • [2, 3, 5 , 1 , 7, 8, 10] 真(5>1)。
  • [2、3、1、5、7、8、10]
  • [2、3、1、5、7、8、10]

第四關:

  • [2, 3 , 1 , 5, 7, 8, 10] 真(3>1)。
  • [2、1、3、5、7、8、10]
  • [2、1、3、5、7、8、10]

第五關:

  • [ 2 , 1 , 3, 5, 7, 8, 10] 真(2>1)。
  • [1、2、3、5、7、8、10]
  • [1、2、3、5、7、8、10]

第六關:

  • [1、2、3、5、7、8、10]

第七關:

  • [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.

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