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