氣泡排序最符合咱們思維上的排序方式。
氣泡排序演算法步驟:
接下來,這個演算法用順序表實現,畢竟用鍊錶有些複雜。
def
bubble_sort
(alist)
: n =
len(alist)
for j in
range(0
,n-1):
for i in
range(0
,n-j-1)
:if alist[i]
>alist[i+1]
: alist[i]
,alist[i+1]
= alist[i+1]
,alist[i]
if __name__ ==
"__main__"
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
bubble_sort(li)
print
(li)
輸出是:
[54,
26,93,
17,77,
31,44,
55,20]
[17,20
,26,31
,44,54
,55,77
,93]
然而,有一種優化後的冒泡演算法,可以達到最優複雜度的氣泡排序演算法:
def
bubble_sort
(alist)
: n =
len(alist)
for j in
range(0
,n-1):
count =
0for i in
range(0
,n-j-1)
:if alist[i]
>alist[i+1]
: alist[i]
,alist[i+1]
= alist[i+1]
,alist[i]
count +=
1if count ==0:
break
if __name__ ==
"__main__"
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
bubble_sort(li)
print
(li)
時間複雜度:
最優時間複雜度:o(n) (表示遍歷一次發現沒有任何可以交換的元素,排序結束。)
最壞時間複雜度:o(n2)
穩定性:穩定
資料結構與演算法 排序 氣泡排序
兩兩相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此...
資料結構與演算法 排序 氣泡排序
今天來學一下十大排序 首先,我們先了解下各個排序的時間複雜度 冒泡 選擇 插入 歸併 快速 希爾 堆排序屬於比較排序 在這裡,我們預設排序是從小到大排序。乙個動態演示各種排序演算法的動畫 visualgo 如果相等的兩個元素,在排序前後的相對位置保持不變,那麼這個演算法是穩定的排序演算法。比如 5 ...
資料結構與演算法 氣泡排序
氣泡排序的思想是,從前往後 或從後往前 掃瞄,每找乙個逆序對,就將它更正過來,這樣每一輪總可以找到乙個最大值或最小值。1 從前往後掃瞄,每次找到的較大值插入到後面,第一層迴圈代表當前插入位置。public static void sinksort int nums,int start,int end...