氣泡排序
所謂冒泡,就是將元素兩兩之間進行比較,誰大就往後移動,直到將最大的元素排到最後面,接著再迴圈一趟,從頭開始進行兩兩比較,而上一趟已經排好的那個元素就不用進行比較了。(圖中排好序的元素標記為黃色柱子)
氣泡排序**演示
上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氣泡排序優化三:最後要考慮的情況就是,如果給你的不是列表,而是物件,或者列表裡面都是字串,那麼上述的**也就沒有用了,這時候你就要自定義函式了,並將其當成引數傳入bubble_sort函式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
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 ['類似的,當有人叫你給乙個類物件排序時,也可以傳入lambda 自定義函式。pear
', '
', '
pitaya
', '
waxberry
', '
watermelon
']
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.比較相鄰兩元素大小,若前乙個元素大於後乙個...