python中的氣泡排序
阿新 • • 發佈:2021-12-01
根據圖示已經找到了一規律
有一個數值是遞增的,有一個數值是遞減的。需要迭代遍歷實現遞增和遞減
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)