1. 程式人生 > >泡沫排序|bubble sort

泡沫排序|bubble sort

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

首先,不知道為啥它叫泡沫排序。。

主要思路:

從前往後比較數字(稱為A)和它下一個數字(稱為B)的大小,如果A>B,則它們交換位置。否則去觀察下一個數。

這樣會保證一個迴圈就可以使最大數的位置確定。下個迴圈去確認下一大的數(從大往小糾正順序)

 

舉個例子:test = [2,1,5,4,3]。

第一步比較2,1..由於2>1,交換位置:test  = [1,2,5,4,3]。仍然繼續觀察2和它下一個數

由於2<5, 不做行動,開始觀察2下一個數:5

由於5>4,交換位置:test = [1,2,4,5,3].

由於5>3,交換位置:test = [1,2,4,3,5].

由此,確認了最大數的位置

 

所以需要大迴圈 (列表長度-1)次。(比方說有三個數字需要排列大小,只要我們知道其中兩個數字的位置,就可以確定最終位置,所以執行次數為3-1)

巢狀的小迴圈為(列表長度-1-已排列完畢的數字數量)次。(已經排列完了,就不需要再排列了,節省空間,避免多餘操作)