Python氣泡排序(6)

2022-07-22 08:15:10 字數 3063 閱讀 3373

前面寫了5種氣泡排序,實質只有2種冒泡方式。

第1種是採用相鄰兩數比較的方式進行排序,第2種是採用與固定位數字比較的方式進行排序。

第1種方式中兩個比較的數所處的位置每次都是不同的,第2種方式中兩個比較的數所處的位置有乙個是不變的。

第1種方式中可以通過新增判斷標識的方式減少排序輪次。

例如如下**中新增了bf標識

python**:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

print("

排序前: %s\r\n

" %lst)#輪

for i in range(int(len(lst)/2)):

bf =false

print("

第%s輪

" % (i+1))

#次for m in range(i,len(lst)-i-1):

#如果前大後小,則交換位置

if lst[m] > lst[m+1]:

lst[m],lst[m+1] = lst[m+1],lst[m]

bf =true

print("

右向冒泡第%s次 [%s]:%s,[%s]:%s比較 互換 %s

" % (m-i+1,m,lst[m+1],m+1,lst[m],lst))

else

:

print("

右向冒泡第%s次 [%s]:%s,[%s]:%s比較 不變 %s

" % (m-i+1,m,lst[m],m+1,lst[m+1],lst))

print("

\r\n")

ifnot

bf:

break#次

for n in range(len(lst)-i-2,i,-1):

#如果前大後小,則交換位置

if lst[n-1] >lst[n]:

lst[n-1],lst[n] = lst[n],lst[n-1]

bf =true

print("

左向冒泡第%s次 [%s]:%s,[%s]:%s比較 互換 %s

" % (9-n-i,n-1,lst[n],n,lst[n-1],lst))

else

:

print("

左向冒泡第%s次 [%s]:%s,[%s]:%s比較 不變 %s

" % (9-n-i,n-1,lst[n-1],n,lst[n],lst))

ifnot

bf:

break

print("

\r\n排序後: %s

" % lst)

輸出結果:

e:\python\algorithm>python3 bubblesort5.py

排序前: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

第1輪 右向冒泡第1次 [0]:1,[1]:2比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第2次 [1]:2,[2]:3比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第3次 [2]:3,[3]:4比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第4次 [3]:4,[4]:5比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第5次 [4]:5,[5]:6比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第6次 [5]:6,[6]:7比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第7次 [6]:7,[7]:8比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第8次 [7]:8,[8]:9比較 不變 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

右向冒泡第9次 [8]:9,[9]:0比較 互換 [1, 2, 3, 4, 5, 6, 7, 8, 0, 9]

左向冒泡第1次 [7]:8,[8]:0比較 互換 [1, 2, 3, 4, 5, 6, 7, 0, 8, 9]

左向冒泡第2次 [6]:7,[7]:0比較 互換 [1, 2, 3, 4, 5, 6, 0, 7, 8, 9]

左向冒泡第3次 [5]:6,[6]:0比較 互換 [1, 2, 3, 4, 5, 0, 6, 7, 8, 9]

左向冒泡第4次 [4]:5,[5]:0比較 互換 [1, 2, 3, 4, 0, 5, 6, 7, 8, 9]

左向冒泡第5次 [3]:4,[4]:0比較 互換 [1, 2, 3, 0, 4, 5, 6, 7, 8, 9]

左向冒泡第6次 [2]:3,[3]:0比較 互換 [1, 2, 0, 3, 4, 5, 6, 7, 8, 9]

左向冒泡第7次 [1]:2,[2]:0比較 互換 [1, 0, 2, 3, 4, 5, 6, 7, 8, 9]

左向冒泡第8次 [0]:1,[1]:0比較 互換 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

第2輪 右向冒泡第1次 [1]:1,[2]:2比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第2次 [2]:2,[3]:3比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第3次 [3]:3,[4]:4比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第4次 [4]:4,[5]:5比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第5次 [5]:5,[6]:6比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第6次 [6]:6,[7]:7比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

右向冒泡第7次 [7]:7,[8]:8比較 不變 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

排序後: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

*****結束*****

排序 氣泡排序 Python

依次比較相鄰兩元素的大小,順序與要求的不一致就交換。這樣會把待排序序列中的最大 最小 元素不斷 浮 到最右端,最終完成公升序或降序排列。對序列 2,4,1,3,6,5 按公升序排列 只記錄有交換發生的迴圈 第一次迴圈 2,4,1,3,6,5 2,1,4,3,6,5 2,1,3,4,6,5 2,1,3...

Python排序 氣泡排序

排序 氣泡排序 氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需...

Python氣泡排序

需求 對於一串不知道個數的無序數進行從大到小或從小到大排序。氣泡排序 思想 首先第乙個數與第二個數做比較,大者放後面作為新的第二個數,然後,第二個數再與第三個數作比較,大者放後面作為新的第三個數,以此類推,相鄰兩位置數比較大小,若前者大於後者,則交換位置,這樣遍歷完一次資料就把最大數放在了最後面,即...