v11 Python排序演算法(一) 氣泡排序

2021-10-17 03:59:46 字數 2229 閱讀 3265

氣泡排序(bubble sort)也是一種簡單直觀的排序演算法。

它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢"浮"到數列的頂端。

氣泡排序就是遍歷資料,每次只與下乙個數字比較,如果這兩個數順序不對,則與交換過來。

問題:將以下資料公升序排列:9, 2, 8, 6, 4

就上面那個問題來說,因為要公升序排列,所以數字越大越排在後面。則兩個數比較的時候,如果後乙個數比當前數小,則順序不對,要將這兩個數交換。

# 計算列表的長度

for j in

range

(n-1):

count =

0# 用於記錄一共交換的次數,可以排除已經是排好了的序列

for i in

range(0

, n-

1-j)

:# 內層迴圈控制走一次的過程

if alist[i]

> alist[i+1]

:# 如果前乙個元素大於後乙個元素,則交換兩個元素(公升序)

alist[i]

, alist[i+1]

= alist[i+1]

, alist[i]

# 交換元素

count +=

1# 記錄交換的次數if0

== count:

# 表示序列是有序的

break

if __name__ ==

'__main__'

: alist =[9

,2,8

,6,4

]print

('原列表為:{}'

.format

(alist)

) bubble_sort(alist)

print

('新列表為:{}'

.format

(alist)

)# 輸出結果如下

原列表為:[9,

2,8,

6,4]

新列表為:[2,

4,6,

8,9]

最優時間複雜度: o(n)

最壞時間複雜度: o(n^2)

在沒有特殊說明時,一般都是計算最壞時間複雜度。

在氣泡排序中,最壞的情況是元素列表的初始狀態是完全逆序排列的,需要進行 n-1 輪「冒泡」,每一輪「冒泡」需要進行 n-i 次比較和交換操作。i 的平均值為 n/2 ,時間複雜度為 t(n)=n(n-1)/2 ,再乘每次操作的步驟數(常數,不影響大o記法),所以氣泡排序的時間複雜度為 o(n^2) 。

穩定性:穩定的排序

排序演算法的穩定性指,當元素列表中有相等的元素時,相等元素的相對次序是否固定不變,如果相對次序固定不變,則排序演算法是穩定的,反之。

在氣泡排序中,每次比較兩個元素,當元素的大小順序錯誤時才會進行交換,如果元素列表中有兩個相等的元素,它們最終肯定會相鄰在一起,但對它們比較時不會進行交換,相對次序是保持不變的。所以氣泡排序是一種穩定的排序演算法。

python演算法 排序(一)

氣泡排序 基本思想 兩兩相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止 要點 1.兩兩注意是相鄰的兩個元素的意思 2.如果有n個元素需要比較n 1次,每一輪減少1次比較 3.既然叫氣泡排序,那就是從下往上兩兩比較,所以看上去就跟泡泡往上冒一樣。def bubblesort numlist ...

演算法導論程式11 堆排序演算法(Python)

堆排序演算法 def heapsort self,a 開始的時候,利用build max heap將輸入陣列a建成最大堆。因為陣列中的最大元素總在根結點a 0 中。通過把它與a len a 1 交換。可以讓元素a 0 放到正確的位置。這個時候,我們從堆中去掉a中的最後乙個結點。即heap size ...

python 排序演算法(一)氣泡排序

氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較 for ...