數據結構學習筆記12(北大公開課)目錄
排序和查找
一、知識概覽
本章主要講解六種排序算法,知識概覽如下:
1.1 冒泡排序算法
1.2 選擇排序算法
二、代碼實現
2.1冒泡排序
# 冒泡排序代碼
def bubbleSort(alist):
# 趟數從n-1開始一直到1
for passnum in range(len(alist) - 1, 0, -1):
# 每一趟中,比對和交換的範圍
for i in range(passnum):
if alist[i] > alist[i + 1]:
temp = alist[i]
alist[i] = alist[i + 1]
alist[i + 1] = temp
# 也可以寫成alist[i],alist[i+1]=alist[i+1],alist[i]
alist = [54, 26, 93, 17, 77, 31]
bubbleSort(alist)
print(alist)
2.2 冒泡排序改進算法
# BS改進,提前退出
def bubbleSort2(alist):
exchange = True
passnum = len(alist) - 1
while passnum > 0 and exchange:
exchange = False
for i in range(passnum):
if alist[i] > alist[i + 1]:
exchange = True
temp = alist[i]
alist[i] = alist[i + 1]
alist[i + 1] = temp
passnum = passnum - 1
alist = [54, 26, 93, 17, 77, 31]
bubbleSort2(alist)
print(alist)
2.3 選擇排序算法
#選擇排序
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]
selectionSort(alist)
print(alist)
2.4 輸出結果
[17, 26, 31, 54, 77, 93]
[17, 26, 31, 54, 77, 93]
[17, 26, 31, 54, 77, 93]