python實現氣泡排序及其優化

2021-08-16 22:05:25 字數 1895 閱讀 8739

氣泡排序是排序演算法中比較基礎的部分,簡單原理就是

將數量大小比作輕重不同的氣泡,輕的氣泡會冒到重的氣泡之上的思想

最原始的排序**如下:

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...