9 氣泡排序 效能改進

2022-05-07 02:24:10 字數 524 閱讀 1330

# 通過監測每趟比對是否發生過交換,可以提前確定排序是否完成

# 如果某趟比對沒有發生任何交換,說明列表已經排好序,可以提前結束演算法

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 -= 1

testlist = [2, 3, 3, 243, 24, 24455, 23]

shortbubblesort(testlist)

print(testlist)

氣泡排序和改進的氣泡排序的效能差距

若記錄序列的初始狀態為 正序 則氣泡排序過程只需進行一趟排序,在排序過程中只需進行n 1次比較,且不移動記錄 反之,若記錄序列的初始狀態為 逆序 則需進行n n 1 2次比較和記錄移動。因此氣泡排序總的時間複雜度為o n n 下面我們編寫乙個測試程式,隨機生成1000組每組為10個元素的陣列,對其採...

氣泡排序 改進

氣泡排序是最簡單的排序演算法之一,在這裡首先要說明的是乙個要注意的地方。氣泡排序在最好情況下時間複雜度可以是o n 2 也可以是o n 下面看一種大家看得最多的寫法 public void bubblesort int arr 上面這樣寫最好情況下也是o n 2 那麼再來看下面這種寫法 public...

排序演算法 氣泡排序(改進)

假如我們運氣好,用了1輪就已經將整個序列排序好了,整個數列已然是有序的了。可是我們的排序演算法仍然 兢兢業業 地繼續執行第2輪 第3輪 直至n 1輪,這就很沒必要。也就是說如果序列已經有序,每一輪排序還是會繼續比較相鄰的元素,這就相當於做了一些沒用的操作。這種情況下,如果我們能判斷出數列已經有序,並...