1. 程式人生 > 其它 >python中的氣泡排序

python中的氣泡排序

根據圖示已經找到了一規律
有一個數值是遞增的,有一個數值是遞減的。需要迭代遍歷實現遞增和遞減

li = [55, 22, 11, 33, 44]  # 這個列表的大小也對應著準備好的圖
# 遞增的數值正好是列表長度的length減一     (len(a) - 1)
for i in range(len(li) - 1):
    # 遞減的數可以讓length減一再減i(i是從0開始的)
    for j in range(len(li) - 1 - i):
        # 前後比較,如果大於符號成立,那就進行交換。否則就什麼也不做
        if li[j] > li[j + 1]:
            # 交換變數
            li[j], li[j + 1] = li[j + 1], li[j]
print(li)
# 氣泡排序已經實現了

其實圖示中可以發現一個問題,第二次就已經排好了。第三次和第四次空比較,沒有意義

可以優化一下程式碼

li = [55, 22, 11, 33, 44] 
count = 0 for i in range(len(li) - 1):
count += 1 # 在每一次開始比較之前,設定一個變數 flag = True for j in range(len(li) - 1 - i): if li[j] > li[j + 1]: li[j], li[j + 1] = li[j + 1], li[j] # 如果發生了交換,那就把變數設定成False flag = False
# 在外層迴圈(每更換一個元素,開始一輪新的比較之前)判斷,變數flag是否變更。 # 如果變更成False就意味著發生了交換。 # 如果沒有發生交換,就意味著排好了,跳出迴圈 if flag: break print(li)
print(count)