python 優化後的氣泡排序

2021-10-05 10:39:22 字數 1472 閱讀 9896

基本原理:

1.每兩兩相鄰的兩個元素依次比較,若前乙個元素比後乙個元素大,則交換位置。第一輪比較完成後最大的數字就跑到了最後乙個,第二輪比較完成後第二大的數字就跑到了最後倒數第二個。

2.假設陣列有n個元素,則第一輪需比較n-1次,第二輪則只需比較n-2次(因為第一輪後最大的數字在最後乙個,第二輪就不用比較最後乙個數字),依此類推,共需比較n-1輪。

3.時間複雜度為o(n^2):因為一共需比較n*(n-1)/2次,

空間複雜度為o(1):因為沒有建立新的陣列,

穩定性:是個穩定的演算法,如果兩個數字相等,比較完成後其順序不會發生改變。

演算法優化:

1.設定全域性標誌位。若某輪比較後,陣列順序改變0次,即沒有發生改變,陣列已是有序,則後續便無需再繼續比較。最好的情況,陣列一開始便有序,則只需比較一輪,共比較n-1次即可,發生順序變化0次。

2.設定最後改變標誌位。若某輪比較,陣列後半截順序未發生改變,則後續比較時則無需考慮此後半截。

**如下:

def

bubble_sort

(arr)

: length =

len(arr)

# 長度為1直接返回

if length ==1:

return arr

else

:# 記錄總共比較次數

total_num =

0# 設定最後標誌位,此標誌位後的元素無需再進行比較

last_flag =

0for i in

range

(length-1)

: flag =

false

for j in

range

(length-last_flag-1)

: total_num +=

1if arr[j]

> arr[j+1]

: arr[j]

, arr[j+1]

= arr[j+1]

, arr[j]

last_flag = length-

(j+1

) flag =

true

ifnot flag:

break

print

('共比較了%d次。'

% total_num)

return arr

if __name__ ==

'__main__'

: lis =[2

,3,4

,8,5

,3,9

,10,12

]print

(bubble_sort(lis)

)# 正常比較 36次

# 設定全域性標誌位只比較了26次

# 繼續設定最大標誌位只比較了16次

氣泡排序 優化後的氣泡排序

氣泡排序法 演算法原理 依次比較相鄰兩個元素的大小,若後面的比前面的小,則交換兩個元素的位置 對每一對相鄰元素作同樣的工作,從第一對到最後一對。進行一輪比較交換下來,最後的元素就會是最小的數了,這個數就不用參與後面的比較操作了 思路 遍歷陣列,對陣列中相鄰的兩個元素進行比較,如果需要公升序,前乙個資...

優化氣泡排序(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 每次遍歷都獲取乙個元素,依次和後面的元素進行比...