選擇排序:先指定最大數據所在的位置爲0,第一次遍歷比較其他位置數據與0上數據的大小,如果大於,則替換改位置爲最大數據位置,遍歷結束,交換數據(python列表爲最大數據與列表最後數據交換)。回到初始指定位置0,進行第二次遍歷(第一次遍歷得出的最大數據不參與第二次遍歷),直至剩列表最後一個數據
【分析】雖然和冒泡排序一樣,選擇排序的時間複雜度仍然是O(n^2),但是數據交換次數比冒泡排序要少~~
【數據】
54,26,93,17,77,31,44,55,20
【要求】:升序排序
【代碼】:
#選擇排序 def selectionSort(alist): last=len(alist)-1 count=0 while last>0: # 設定初始最大值所在的位置爲0 #必須放在循環裏面,不然第一個位置就沒法參與排序 maxPosition = 0 for i in range(1,last+1): if alist[i]>alist[maxPosition]: # 替換最大值所在的位置 maxPosition=i if alist[last]!=alist[maxPosition]: #交換最大值和最後位置的數據 temp=alist[last] alist[last]=alist[maxPosition] alist[maxPosition]=temp count=count+1 last=last-1 print('選擇排序的數據交換次數爲',count,'次') return alist # print(selectionSort([5,2,3,8,4,9,1,1,1,1,11,1,15,6,4,8,9,7,5,1,4,6,1,3,4,999,7,8,78,7,9,5,5])) print(selectionSort([54,26,93,17,77,31,44,55,20]))
【結果展示】:
選擇排序的數據交換次數爲 6 次
[17, 20, 26, 31, 44, 54, 55, 77, 93]
#如果沒有最後的判斷,數據交換次數爲8次