Python氣泡排序演算法及其優化

2022-08-10 20:30:18 字數 3941 閱讀 8025

氣泡排序

所謂冒泡,就是將元素兩兩之間進行比較,誰大就往後移動,直到將最大的元素排到最後面,接著再迴圈一趟,從頭開始進行兩兩比較,而上一趟已經排好的那個元素就不用進行比較了。(圖中排好序的元素標記為黃色柱子)

氣泡排序**演示

上python**:

1

defbubble_sort(items):

2for i in range(len(items) - 1):

3for j in range(len(items) - 1 -i):

4if items[j] > items[j + 1]:

5 items[j], items[j + 1] = items[j + 1], items[j]

6return

items78

9 list1 = [2,1,9,11,10,8,7]

10print(bubble_sort(list1))

輸出結果:

1 [1, 2, 7, 8, 9, 10, 11]
這是氣泡排序最普通的寫法,但你會發現它有一些不足之處,比如列表:[1,2,3,4,7,5,6],第一次迴圈將最大的數排到最後,此時列表已經都排好序了,就是不用再進行第二次、第三次...

氣泡排序優化一:

設定乙個變數為false,如果元素之間交換了位置,將變數重新賦值為true,最後再判斷,在一次迴圈結束後,變數如果還是為false,則brak退出迴圈,結束排序。

1

defbubble_sort(items):

2for i in range(len(items) - 1):

3 flag =false

4for j in range(len(items) - 1 -i):

5if items[j] > items[j + 1]:

6 items[j], items[j + 1] = items[j + 1], items[j]

7 flag =true8if

notflag:

9break

10return items

氣泡排序優化二:攪拌排序 / 雞尾酒排序上面這種寫法還有乙個問題,就是每次都是從左邊到右邊進行比較,這樣效率不高,你要考慮當最大值和最小值分別在兩端的情況。寫成雙向排序提高效率,即當一次從左向右的排序比較結束後,立馬從右向左來一次排序比較。

雙向排序**演示

python**:

1

defbubble_sort(items):

2for i in range(len(items) - 1):

3 flag =false

4for j in range(len(items) - 1 -i):

5if items[j] > items[j + 1]:

6 items[j], items[j + 1] = items[j + 1], items[j]

7 flag =true8if

flag:

9 flag =false

10for j in range(len(items) - 2 - i, 0, -1):

11if items[j - 1] >items[j]:

12 items[j], items[j - 1] = items[j - 1], items[j]

13 flag =true

14if

notflag:

15break

16return items

氣泡排序優化三:最後要考慮的情況就是,如果給你的不是列表,而是物件,或者列表裡面都是字串,那麼上述的**也就沒有用了,這時候你就要自定義函式了,並將其當成引數傳入bubble_sort函式

python**:

def bubble_sort(items, comp=lambda x, y: x >y):

for i in range(len(items) - 1):

flag =false

for j in range(len(items) - 1 -i):

if comp(items[j],items[j + 1]):

items[j], items[j + 1] = items[j + 1], items[j]

flag =true

ifflag:

flag =false

for j in range(len(items) - 2 - i, 0, -1):

if comp(items[j - 1],items[j]):

items[j], items[j - 1] = items[j - 1], items[j]

flag =true

ifnot

flag:

break

return

items

list2 = ['

', '

watermelon

', '

pitaya

', '

waxberry

', '

pear']

print(bubble_sort(list2,lambda s1,s2: len(s1) > len(s2))) #

按照字串長度從小到大來排序

輸出結果:

1 ['

pear

', '

', '

pitaya

', '

waxberry

', '

watermelon

']

類似的,當有人叫你給乙個類物件排序時,也可以傳入lambda 自定義函式。

1

class

student():

2"""

學生"""34

def__init__

(self, name, age):

5 self.name =name

6 self.age =age78

def__repr__

(self):

9return f': '

1011 items1 =[

12 student('

wang dachui

', 25),

13 student('

di ren jie

', 38),

14 student('

zhang sanfeng

', 120),

15 student('

bai yuanfang

', 18)16]

1718

print(bubble_sort(items1, lambda s1, s2: s1.age > s2.age))

輸出結果:按照年齡從小到大排序

1 [bai yuanfang: 18, wang dachui: 25, di ren jie: 38, zhang sanfeng: 120]
以上就是關於氣泡排序的原理,以及一些優化寫法,希望會對你有所幫助。

氣泡排序及其改進演算法

第乙個排序函式 sort1 為氣泡排序的典型實現,第二和第三個為改進後的排序函式 include include define len 20000 double sort1 int int double sort2 int int double sort3 int int int main int ...

排序演算法 冒泡演算法及其優化

所謂冒泡演算法,就是第乙個跟第二個比,第二個跟第三個比。首先從第乙個樹比到最後乙個數,如果第乙個比第二個大,那麼一二互換,如果二三比,二大,二三再互換,如此下去,最大的數就會排到最後面,然後就是再從第乙個數比到倒數第二個,重複上面的動作 現在我們看一下 22 54 16 vi bublle 1.c ...

氣泡排序及其Python實現

氣泡排序就是重複從序列左端開始比較相鄰兩元素的大小,根據比較結果交換兩數字位置,最終使序列元素滿足公升序或降序排列。在此過程中,元素會像泡泡一樣,逐漸從左向右 浮 到序列頂端,因此該演算法被稱為 氣泡排序 以公升序為例,對氣泡排序演算法執行過程進行說明 1.比較相鄰兩元素大小,若前乙個元素大於後乙個...