1、遇到的情況:對於s = [5, 1, 2, 3, 4]這個列表而言,只執行一次迴圈即可實現排序,如果繼續迴圈,就是1與2、3、 4進行排序,很浪費時間,所以沒必要。
2、解決辦法:
增加標示為flag,如果flag為true則表示還要繼續排序,否則直接輸出。
3、**
# coding: utf-8;
def bubble_sort(b):
n = len(b)
"""第乙個迴圈設定氣泡排序的次數,如果有n個數,那麼需要將n-1個數
進行歸位;
其中flag是標誌位,如果任意位置的相鄰的兩個數之間不用交換位置,
則flag = false,那麼直接
輸出,因為已經排好序了"""
for i in range(0, n-1):
flag = false
for j in range(0, n-1-i):
if b[j] > b[j+1]:
b[j], b[j+1] = b[j+1], b[j]
flag = true
if not flag:
return b
return b
a = [5, 2, 45, 6, 8, 2, 1]
print(bubble_sort(a))
優化氣泡排序(python)
記錄交換操作發生的位置,如果沒有發生交換操作,則代表排序已經可以終止 這樣一來氣泡排序最好的情況下,時間複雜度就從o n 2 優化到了o n def imroved bubble sort l length len l swaplast length 1for i in range len l si...
python 氣泡排序 優化
li 11,22,44,88,66,55,33 def maopao li n len li 遍歷列表長度減1次,最後乙個不需要比較 for i in range 1,n 建立乙個變數flag,用來記錄本輪冒泡,是否有資料交換位置 flag false 每次遍歷都獲取乙個元素,依次和後面的元素進行比...
python 優化後的氣泡排序
基本原理 1.每兩兩相鄰的兩個元素依次比較,若前乙個元素比後乙個元素大,則交換位置。第一輪比較完成後最大的數字就跑到了最後乙個,第二輪比較完成後第二大的數字就跑到了最後倒數第二個。2.假設陣列有n個元素,則第一輪需比較n 1次,第二輪則只需比較n 2次 因為第一輪後最大的數字在最後乙個,第二輪就不用...