冒泡排序
時間複雜度
- 冒泡排序的算法思路在於對無序表進行多趟比較交換
- 每趟包括了多次亮亮相鄰比較,並將逆序的數據項互換位置,最終能將本趟的最大項就位
- 經過n-1趟比較交換,實現整表排序
- 每趟的過程類似於“氣泡”在水中不斷上浮到水面的過程
具體過程:
- 第1趟比較交換,共有n-1對相鄰數據進行比較(一旦經過最大項,則最大項會一路交換到達最後一項);
- 第2趟比較交換時,最大項已經就位,需要排序的數據減少爲n-1,共有n-2對相鄰數據進行比較;
- 直到第n-1趟完成後,最小項一定在列表首位,就無需再處理了。
def bubbleSort(alist):
for passnnum in range(len(alist) - 1, 0, -1):
for i in range(passnnum):
if alist[i] > alist[i + 1]:
temp = alist[i]
alist[i] = alist[i + 1]
alist[i + 1] = temp
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
bubbleSort(alist)
print(alist)
選擇排序
- 選擇排序對冒泡排序進行了改進,保留了其基本的多趟比對思路,每趟都使當前最大項就位。
- 但選擇排序對交換進行了削減,相比起冒泡排序進行多次交換,每趟僅進行1次交換,記錄最大項的所在位置,最後再跟本趟最後一項交換
- 選擇排序的時間複雜度,比起冒泡稍優
對比次數不變還是,交換次數減少爲
def selectionSort(alist):
for fillslot in range(len(alist)-1,0,-1):
positionOfMax = 0
for location in range(1, fillslot+1):
if alist[location]>alist[positionOfMax]:
positionOfMax = location
temp = alist[fillslot]
alist[fillslot] = alist[positionOfMax]
alist[positionOfMax] = temp
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
selectionSort(alist)
print(alist)