氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
氣泡排序演算法的運作如下:
交換過程圖示(第一次):
從上述圖示來看交換第一次是第乙個元素和後乙個元素進行比較如果前者元素大於後者元素則進行交換,這個過程一直到第一次結束,那我們可以寫出交換一次的**:
a=[8
,4,5
,6,2
,3,5
,7,1
]n=len(a)
for i in
range(0
,n-1):
if a[i]
>a[i+1]
: a[i]
,a[i+1]
=a[i+1]
,a[i]
print
(a)
可以看出列表裡面的第乙個元素也是列表中最大的元素到了列表的最後一位,說明我們的交換第一次的過程成功了。那接下來我們就要完成所有的交換,我們可以把**塊封裝起來:
def
mao(alist)
: n=
len(alist)
for j in
range(0
,n-1):
for i in
range(0
,n-1
-j):
if alist[i]
>alist[i+1]
: alist[i]
,alist[i+1]
=alist[i+1]
,alist[i]a=[
8,4,
5,6,
2,3,
5,7,
1]mao(a)
print
(a)
對於我們上面寫的**來看,它的時間複雜度t(n)=o(n*n)=o(n**2),這也是這個程式的最壞時間複雜度,那如果一開始列表的大小順序都是已經排好的呢,我們就因該考慮最優時間複雜度,則對上面程式進行優化:
def
mao(alist)
: n=
len(alist)
for j in
range(0
,n-1):
count=
0for i in
range(0
,n-1
-j):
if alist[i]
>alist[i+1]
: alist[i]
,alist[i+1]
=alist[i+1]
,alist[i]
count+=
1if count==0:
return a=[
8,4,
5,6,
2,3,
5,7,
1]mao(a)
print
(a)
定義乙個變數count讓它來記再一次交換中前乙個元素有沒有和後乙個元素進行交換,如果進行交換count+=1,如果沒有則在一次交換結束count=0,進行判斷,滿足條件,return 直接退出函式,減少了**的重複迴圈,則最有時間複雜度t(n)=o(n) 氣泡排序及其優化
然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...
氣泡排序及其優化
課程名稱 資料結構 實驗專案名稱 排序演算法的實現與比較 實驗目的 1 掌握優化氣泡排序的演算法 實驗要求 1 對於輸入的任意乙個整型資料序列,將其進行氣泡排序,要求該氣泡排序的演算法為優化之後的演算法,即 a.設定flag變數,當一趟排序結束後flag的值未更新,剛說明序列已經有序,停止排序 b....
氣泡排序及其優化
bubble sort比較簡單,本文首先列出了基礎版本bubble sort的偽 之後做兩點小的優化。1.基礎版本bubblesort 原始版的bubblesort 時間複雜度為o n 2 function bubblesort array x,int length for int i 0 i le...