氣泡排序是排序演算法中比較基礎的部分,簡單原理就是
將數量大小比作輕重不同的氣泡,輕的氣泡會冒到重的氣泡之上的思想
最原始的排序**如下:
def
bubblesort
(numlist):
ifnot len(numlist):
return
for i in range(len(numlist)):
for j in range(len(numlist)-1):
if numlist[i] < numlist[j]:
numlist[i], numlist[j] = numlist[j], numlist[i]
return numlist
利用雙重迴圈會造成不必要的比較,所以初級優化,可以考慮從尾部開始,這樣可以將以排好序的部分不再檢查,對應**如下
def
bubblesort_optimize
(numlist):
ifnot len(numlist):
return
for i in range(len(numlist)):
j = len(numlist)-1
while j > i:
if numlist[j] < numlist[j-1]:
numlist[j], numlist[j-1] = numlist[j-1], numlist[j]
j -= 1
return numlist
以上**還可以進一步優化,通過設定boolean變數來判斷某次迴圈是否沒有出現交換,說明排序已完成,可以返回。對應**如下:
def
bubblesort_optimize_2
(numlist):
ifnot len(numlist):
return
isswap = true
for i in range(len(numlist)):
isswap = false
j = len(numlist)-1
while j > i:
if numlist[j] < numlist[j-1]:
numlist[j], numlist[j-1] = numlist[j-1], numlist[j]
isswap = true
j -= 1
ifnot isswap:
return numlist
return numlist
主函式測試**如下:
if __name__ == '__main__':
l1 = [6,3,2,-4,-100,0,68,1,66,100,51,0,489,-4564,64]
print(l1)
l2 = l1.copy()
l3 = l1.copy()
l1 = bubblesort(l1)
print(l1)
bubblesort_optimize(l2)
print(l2)
bubblesort_optimize_2(l3)
print(l3)
補充說明:這裡採用copy方法,而不直接賦值,是因為直接賦值後得到的列表2和3都會隨著list1的改變和改變,具體可以看看copy()和deepcopy()和直接賦值的區別,本文不做詳細介紹程式執行結果:
氣泡排序及其Python實現
氣泡排序就是重複從序列左端開始比較相鄰兩元素的大小,根據比較結果交換兩數字位置,最終使序列元素滿足公升序或降序排列。在此過程中,元素會像泡泡一樣,逐漸從左向右 浮 到序列頂端,因此該演算法被稱為 氣泡排序 以公升序為例,對氣泡排序演算法執行過程進行說明 1.比較相鄰兩元素大小,若前乙個元素大於後乙個...
氣泡排序及其優化(C 實現)
include includeusing namespace std 氣泡排序的特點 每一輪冒泡過後,在過去一輪遍歷中訪問過的元素中的最大元素 一定會到達它最終應當處在的位置。基礎版本的氣泡排序 雙迴圈。外層迴圈控制冒泡次數,內層迴圈實現每一輪的 冒泡處理 先進行元素比較,再進行元素交換。void ...
Python氣泡排序演算法及其優化
氣泡排序 所謂冒泡,就是將元素兩兩之間進行比較,誰大就往後移動,直到將最大的元素排到最後面,接著再迴圈一趟,從頭開始進行兩兩比較,而上一趟已經排好的那個元素就不用進行比較了。圖中排好序的元素標記為黃色柱子 氣泡排序 演示 上python 1 defbubble sort items 2for i i...