氣泡排序(bubble sort),是一種較簡單的排序演算法。
它重複地遍歷要排序的元素列,依次比較兩個相鄰的元素,如果順序錯誤就交換這兩個元素,直到沒有相鄰元素需要交換,此時該元素列排序完成。
這個演算法的名字由來:越大的元素會經過交換慢慢「浮」到數列的頂端(公升序),就像氣泡最終會上浮到頂端一樣,故名「氣泡排序」。
(以公升序為例)比較兩個相鄰的元素,將較大的元素放在較小的元素後面。
(1)第一次比較:比較第乙個元素和第二個元素,並按序排列這兩個數;
(2)第二次比較:比較第二個元素和第三個元素,並按序排列這兩個數;
(3)按這種方法,一直比較到最後乙個元素,並按序排列這兩個數;
(4)此時第一趟比較結束,元素列中的最後乙個元素一定是最大的數,因此,下一趟比較中,比較次數減一;
(5)按照步驟1到3進行第二趟比較,完成後倒數第二個數一定是第二大的數,因此,下一趟比較中,比較次數繼續減一;
(6)以此類推,直到元素列有序。
例子:公升序排序元素列 [3, 5, 4, 6, 1, 2],需要比較5趟。
特點:每一趟排序後就會少比較一次,一定程度上減少了計算量。
時間複雜度:如果元素列本身就是正序,那麼第一趟比較即可完成排序,所以最好的時間複雜度為o(n);如果元素列是反序的,那麼需要(n - 1)趟排序,第 i 趟排序需要進行(n - i)次比較,此時時間複雜度為o(n2),因此平均時間複雜度為o(n2)。
普通氣泡排序
def bubblesort(list):
size = len(list)
#外迴圈
for i in range(size-1):
for j in range(size-1-i):
if list[j] > list[j+1]:
list[j], list[j+1] = list[j+1], list[j]
return list
從上述**中我們可以看到,即使元素列本身是正序,但仍需要比較n趟才能結束。因此,我們對其進行了優化,使元素列有序後跳出迴圈。
優化氣泡排序
def bubblesort(list):
size = len(list)
#外迴圈
for i in range(size-1):
didswap = false
for j in range(size-1-i):
if list[j] > list[j+1]:
list[j], list[j+1] = list[j+1], list[j]
didswap = true
if didswap == false:
break
return list
三分鐘徹底了解氣泡排序
氣泡排序的最佳時間複雜度為什麼是o(n2)
氣泡排序(python實現)
coding utf 8 created on tue jul 4 11 37 19 2017 data list cnt num all 0 def data in func data list,cnt num all while true judge continue input 請選擇是輸入資...
氣泡排序(Python實現)
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...
Python實現氣泡排序
氣泡排序 bubble sort 是最容易理解的排序演算法之一,但是執行效率有點低。冒泡過程 對待排序部分 假設有m個元素 從頭開始進行兩兩比較,如果第乙個比第二個大 公升序 就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面 m 1 個數進行冒泡。完整的氣泡排序...