目錄
一、氣泡排序bubble sort
二、演算法分析
三、效能改進
氣泡排序的演算法思路在於對無序表進行多趟比較交換,每趟包括了多次兩兩相鄰比較,並將逆序的資料項交換位置,最終能將本趟的最大項就位。經過n-1趟比較,實現整表排序,每趟的過程類似於「氣泡」在水中不斷上浮到水面的經過。
無序表初始資料項的排列狀況對氣泡排序沒有影響。
演算法過程共需要n-1趟,隨著趟數的增加,比對次數逐步從n-1減少到1,幷包括可能發生的資料項交換。
比對次數是1到n-1的累加:1/2 * (n*n-1),比對的時間複雜度是o(n^2)。
關於交換次數,時間複雜度也是o(n^2),通常每次交換包括3次賦值,最好的情況是列表在排序前已經有序,交換次數為0。最差的情況是每次比對都要進行交換,交換的次數等於比對的次數,平均情況則是最差情況的一半。
氣泡排序通常作為時間效率較差的排序演算法,來作為其它排序演算法的對比基準,其效率主要差在每個資料項在找到其最終位置之前必須要經過多次對比和交換,其中的大部分操作是無效的,但是有一點優勢,就是無需任何額外的儲存空間開銷。
通過每趟比對是否發生過交換可以提前確定排序是否完成,這也是其他多數排序演算法無法做到的。如果某趟對比沒有發生任何交換,說明列表已經排好序,則可以提前結束演算法。
**:
def shortbubblesort(alist):
exchanges = true
passnum = len(alist) - 1
while passnum > 0 and exchanges:
exchanges = false
for i in range(passnum):
if alist[i] > alist[i+1]:
exchanges = true
alist[i], alist[i+1] = alist[i+1], alist[i]
passnum = passnum - 1
return alist
資料結構 氣泡排序
起泡排序的過程很簡單。首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依次類推,直至第n 1個記錄和第n個記錄的關鍵字進行比較為止。上述過程稱作第一趟起泡排序,其結果使得關鍵字最大的記錄被安置到最後乙個記錄的位置上。然後進行...
資料結構 氣泡排序
氣泡排序演算法的基本思想是 假設待排序表長為n,從後往前 或從前往後 兩兩比較相鄰元素的值,若為逆序 即a i 1 a i 則交換它們,直到序列比較完。我們稱它為一趟冒泡,如果將最小的元素交換到待排序序列的第乙個位置 關鍵字小的元素往上 漂浮 這就是氣泡排序名字的由來 下一趟冒泡時,前一趟確定的最小...
資料結構 氣泡排序
目標效果 原始碼 include void print out int a,int n void bubble sort int a,int n int main printf 起泡排序 n printf 排序前 n printresult a,10 排序方法 bubblesort a,10 pri...