氣泡排序(bubble sort):
是一種簡單的、非常低效的排序演算法。氣泡排序依次地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤(如從大到小、首字母從a到z)就把他們交換位置,直到沒有相鄰元素需要交換,即該數列已經排序完成。這個演算法名字的由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。
短路氣泡排序:
在某次遍歷過程中沒有發生交換,說明整個排序已完成,無需繼續遍歷,遍歷提前結束,這就是短路氣泡排序。
氣泡排序在平均和最壞情況下的時間複雜度都是 o(n²),最好情況下都是 o(n),空間複雜度是 o(1)。
示例:
# 普通氣泡排序
def bubblesort(alist):
n = len(alist) - 1 #此處減1可減少下方遍歷時重複計算
for passnum in range(n, 0, -1): #共需遍歷n次,因1個元素是不需要再遍歷的
for i in range(passnum): #1次迴圈遍歷
if alist[i] > alist[i+1]: #公升序排列
alist[i], alist[i+1] = alist[i+1], alist[i] #python特有的交換方式
# 短路氣泡排序
def shortbubblesort(alist):
n = len(alist) - 1
exchanges = false #初始化為未交換過
for passnum in range(n, 0, -1):
for i in range(passnum):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
exchanges = true #有交換
if exchanges == false: #若本次遍歷無交換,則
break #說明已按公升序排序,無需繼續遍歷,跳出
alist = [53, 26, 93, 17, 77, 31, 44, 55, 20]
bubblesort(alist)
print(alist)
blist = [53, 26, 93, 17, 77, 31, 44, 55, 20]
shortbubblesort(blist)
print(blist)
結果:
[17, 20, 26, 31, 44, 53, 55, 77, 93]
[17, 20, 26, 31, 44, 53, 55, 77, 93]
Python之氣泡排序
氣泡排序 演算法簡介 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。6.2時間複雜度與空...
Python之氣泡排序
1 先看氣泡排序的原理 一 氣泡排序簡介 氣泡排序 bubble sort 是一種常見的排序演算法,相對來說比較簡單。氣泡排序重複地走訪需要排序的元素列表,依次比較兩個相鄰的元素,如果順序 如從大到小或從小到大 錯誤就交換它們的位置。重複地進行直到沒有相鄰的元素需要交換,則元素列表排序完成。在氣泡排...
Python之氣泡排序
給出乙個純數字列表.請對列表進行排序。列表為lst 7,9,6,3,8,4,2,5,1,0,435,345,123,567,457,456,678,此時用到乙個知識點 a,b b,a lst 7,9,6,3,8,4,2,5,1,0,435,345,123,567,457,456,678,lst2 f...