氣泡排序(bubble sort)是最容易理解的排序演算法之一,但是執行效率有點低。
冒泡過程:對待排序部分(假設有m個元素)從頭開始進行兩兩比較,如果第乙個比第二個大(公升序),就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面(m-1)個數進行冒泡。
完整的氣泡排序就是進行n-1(n為數列長度)次的冒泡。
氣泡排序演算法還可以進行改進,就是在演算法中加入乙個布林變數來記錄該輪排序是否產生過資料交換,若在某一輪排序中未發生資料交換,則說明待排序部分已經有序,無需再進行排序。def
bubblesort
(source):
for i in range(len(source)-1, 0, -1): # i控制待排序區間的長度
for j in range(i): # 對下標為0到i-1的區域排序
if source[j] > source[j + 1]: # 保證值大的元素往後移
source[j], source[j + 1] = source[j + 1], source[j]
return source
s = [8,6,13,7,17,1,4,5,2]
print(bubblesort(s))
# 輸出:
# [1, 2, 4, 5, 6, 7, 8, 13, 17]
最優時間複雜度:o(n) (輸入已經有序,一次掃瞄即可完成排序)def
bubblesort_v2
(source):
for i in range(len(source)-1, 0, -1):
exchange = false
# 記錄本輪排序是否產生過資料交換
for j in range(i):
if source[j] > source[j + 1]:
exchange = true
source[j], source[j + 1] = source[j + 1], source[j]
# 如果未發生交換,說明數列已經有序,直接返回
ifnot exchange:
print('程式於第%d輪結束'%(len(source) - i))
break
return source
# 為了檢驗改進是否有效,我們輸入乙個有序數列,那麼程式應該在排序一輪後就結束。
s = [1,2,3,4,5,6,7]
print(bubblesort_v2(s))
# 輸出:
# 程式於第1輪結束
# [1,2,3,4,5,6,7]
最壞時間複雜度:o(n2)(輸入為反序)
平均時間複雜度:o(n2)
空間複雜度:o(1)
穩定性:因為交換的條件是大於(或者小於),故值相等的兩個元素的前後順序不會改變,所以演算法穩定。
氣泡排序(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 是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。def bu...