氣泡排序(Python實現)

2021-08-26 02:48:55 字數 1847 閱讀 6103

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從a到z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

氣泡排序演算法的原理如下:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

def bubble_sort(alist):

for j in range(len(alist)-1):

for i in range(len(alist)-1-j):

if alist[i] > alist[i+1]:

alist[i],alist[i+1] = alist[i+1],alist[i]

return alist

if __name__ == '__main__':

li = [1,3,4,2,9,5,8]

print(li)

bubble_sort(li)

print(li)

思路:若列表有存在n個元素

第1次開始比較的時候經過n-1次的比較將最大的數傳到最後

第2次開始比較的時候經過n-2次的比較將第二大的數傳到倒數第二個

第n次需要交換(n-n)次

一共需要交換(n-1)次

也可以換成下面這種寫法

def bubble_sort(alist):

for j in range(len(alist)-1,0,-1):

for i in range(j):

if alist[i] > alist[i + 1]:

alist[i], alist[i + 1] = alist[i + 1], alist[i]

return alist

if __name__ == '__main__':

li = [1,3,4,2,9,5,8]

print(li)

bubble_sort(li)

print(li)

這樣的時間複雜度是o(n**2)

但是如果本來的列表順序就是順序排列呢?每次仍然需要排列n**2次有點浪費

def bubble_sort(alist):

for j in range(len(alist)-1):

count = 0

for i in range(len(alist)-1-j):

if alist[i] > alist[i+1]:

alist[i],alist[i+1] = alist[i+1],alist[i]

count += 1

if count == 0:

return alist

return alist

if __name__ == '__main__':

li = [1,3,4,2,9,5,8]

print(li)

bubble_sort(li)

print(li)

我們可以設定乙個變數,如果走完一輪還沒有發現有任何交換過的次數,

說明此時列表是順序的(最優情況下時間複雜度是o(n))

直接返回即可

氣泡排序(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 是最容易理解的排序演算法之一,但是執行效率有點低。冒泡過程 對待排序部分 假設有m個元素 從頭開始進行兩兩比較,如果第乙個比第二個大 公升序 就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面 m 1 個數進行冒泡。完整的氣泡排序...

python實現氣泡排序

氣泡排序 英語 bubble sort 是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。def bu...