<待上傳>
在一組數值中[ 3, 8, 23, 1],由左而右找到最小(或最大)的數值,再跟第1個數交換(例如:串列中數值1最小,跟數值3交換[ 1, 8, 23, 3 ]),再從剩下數值中依序找第2小(第2大)、第3小(第3大)…依序跟第2個數、第3個數…交換。
舉列:5個數的數列[ 3, 8, 23, 1,15]
Step1:第一回合先定第1個數為最小值。目前數列[ 3, 8, 23, 1,15]
比較最小數[3]與第2個數[23];
比較最小數[3]與第3個數[8];
比較最小數[3]與第4個數[1],[1]比較小,將最小數改設為第4個數[1]
比較最小數[1]與第5個數[15];
→將第1個數[3]與最小數[1]互換。
Step2 :第二回合先定第2個數為最小值。目前數列[1,8,23,3,15]
比較最小數[8]與第3個數[23];
比較最小數[8]與第4個數[3],[3]比較小,將最小數改設為第4個數[3]
比較最小數[3]與第5個數[15]
→將第2個數[8] 與最小數[3]互換。
Step3 :第三回合先定第3個數為最小值。目前數列[1,3,23,8,15]
比較最小數[23]與第4個數[8],[8]比較小,將最小數改設為第4個數[8]
比較最小數[8]與第5個數[15];
→將第3個數[23]與最小數[8]互換。
Step4:第四回合先定第4個數為最小值。目前數列[1,3,8,23,15]
比較最小數[23]與第5個數[15],[15]比較小,將最小數改設為第5個數[15]
→將第4個數[23]與最小數[15]互換。
Finish:最後數列[1,3,8,15,23]
import random
def select_sort(data):#定義選擇排序法副程式
a=len(data)#變數a為串列data中資料總數
for i in range(a-1):#大回圈5次 i=0,1,2,3,4
idx=i#定位點,一開始是第0個數值
for j in range(idx+1,a):#小回圈從第2個比較到最後、從第3個比到最後、從第4個比到最後…
if data[idx]>data[j]:#如果找節比較小的數值,則改變定位點(要交換的數)
idx=j
data[i],data[idx]=data[idx],data[i]
print(data,"第%d回合:找到第%d小的數值%d" %(i+1,i+1,data[i]))#列印每回合的結果
print()
print(data,"選擇排序法完成")
data=[]#定義空串列
num=int(input("請輸入總共要排序幾個數字:"))#輸入共要排序幾個數字。
for i in range(num):#填入亂數
data.append(random.randint(1,99))
print(data,"原始未排序資料\n")
select_sort(data)