比較列表相鄰的兩個值,如果前面比後面大,則交換這兩個值。每一趟氣泡排序,無序區減少乙個數,有序區增加乙個數。
最壞情況:o(n2n^2
n2)平均情況:o(n
2n^2
n2)最好情況:o(n)
o(1)
穩定
簡單
趟數:n - 1無序區範圍:0 ~ n - 趟數 - 1
在一趟氣泡排序完成後,如果沒有發生任何的交換,則認為列表已經是有序的,可以直接結束演算法。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""氣泡排序
比較列表每相鄰的兩個數,如果前面比後面大,則交換這兩個數。
一趟排序完成後,無序區減少乙個數,有序區增加乙個數。
時間複雜度:o(n^2)
關鍵點:趟(n - 1);無序區範圍(n - 趟數 - 1)
優化: 在氣泡排序的一趟排序完成後,如果沒有發生任何的交換,
則認為列表已經是有序的,可以直接結束演算法。
"""import random
defbubble_sort
(ls, reverse=
false):
"""氣泡排序
args:
:param ls: list, 待排序的列表
:param reverse: bool, 公升序還是降序,預設公升序
"""length =
len(ls)
# 決定是公升序還是降序
# symbol =
# default_symbol = symbol['gt']
# if reverse:
# default_symbol = symbol['lt']
# con_tpl = f'ls[j] ls[j + 1]'
for i in
range
(length -1)
:# 趟數
exchange =
false
# 標誌位,是否進行了交換
for j in
range
(length - i -1)
:# 無序區範圍
# if eval(con_tpl):
if ls[j]
> ls[j +1]
: ls[j]
, ls[j +1]
= ls[j +1]
, ls[j]
exchange =
true
# 進行了交換
ifnot exchange:
return
ls =
[random.randint(0,
100)
for _ in
range(10
)]print
(ls)
bubble_sort(ls, reverse=
true
)print
(ls)
Python排序演算法之氣泡排序
顧名思義,氣泡排序直觀的意思是氣泡越大冒的越快 對應到我們的列表中就是數字最大的先選出來,然後依次進行。例如 mylist 1,4,5,0,6 比較方式為 相鄰的兩個數字先進行比較,也就是mylist 0 和mylist 1 發現不是 的關係,就繼續比較mylist 1 和mylist 2 依次進行...
排序演算法之python氣泡排序
氣泡排序是一種交換排序 比較相鄰的連個關鍵字,把大的往後放,小的就向前移動,即冒泡 def bubblesort input list 如果待排序列為空,則直接返回空列表 if len input list 0 return sorted list input list for i in range...
排序演算法(python) 之 氣泡排序
比較相鄰的兩個元素,若前乙個大於後乙個則交換 對每一對相鄰元素進行比較,直至最後一對元素。重複上述步驟,知道排序完成。這為向上冒泡。向下冒泡同理。1 向上冒泡 m input split n int m i for i in range len m 輸入的陣列 for i in range len ...