python 選擇排序

選擇排序的基本思路是透過迴圈找到亂序列表中最小的那個值,然後把最小的那個值跟列表中的第一個值交換位置

python 選擇排序

選擇排序

如上圖所示第一次迴圈之後從列表中找到了最小的那個值並且把最小值跟第一個值交換,交換之後右邊依然是亂序狀態。

然後就從剩下的列表中在找到一個最小值跟列表中的第二個值交換位置,以此類推知道所有的元素排列完畢

程式碼思路

現在有一個列表 [64, 25, 12, 22, 11],我們一眼就能看出來最小的值是11對應的下標是4,但是計算機並不知道啊。即便是我直接告訴它它也不能信,它會選擇自己去判斷,畢竟計算機比較死板。

# 建立一個列表num_listnumber_list = [64,25,12,22,11]# 欺騙計算機最小的那個值對應64,對應的下標是0min_index = 0# 計算機選擇相信自己迴圈挨個進行驗證for i in range(0,len(number_list)): if number_list[min_index] > number_list[i]: min_index = iprint(min_index)

python 選擇排序

圖一

可以看到迴圈之後計算機果然找到了最小值對應的下標是4,接下來就可以進行交換了,把下標為4的那個值交換到0號位置

# 找到最小的那個值之後把這個值交換到0號位number_list[0],number_list[min_index] = number_list[min_index],number_list[0]print(number_list)

python 選擇排序

圖二

經過剛才一套花裡胡哨的操作後終於把最小值11放到了0號位置,但是剩下的數依然是亂序,因此還需要剛才的操作,因為0號位置已經確定,所以下次最小的那個值就應該放在1號位置了

for i in range(1,len(number_list)): if number_list[min_index] > number_list[i]: min_index = inumber_list[1],number_list[min_index] = number_list[min_index],number_list[1]print(number_list)

python 選擇排序

圖三

12也被移動到了2號下標,剩下的程式碼思路都是一樣的需要像剛才那樣的迴圈至少還要寫兩次,像這種重複性的程式碼自然也是可以使用迴圈來簡化程式碼的

最終程式碼

# 建立一個列表num_listnumber_list = [64,25,12,22,11]for i in range(len(number_list)): # 欺騙計算機最小的那個值對應的下標是i min_index = i # 計算機選擇相信自己 for j in range(i+1,len(number_list)): if number_list[min_index] > number_list[j]: min_index = j # 找到最小的那個值之後把這個值交換到i號位 number_list[min_index],number_list[i] = number_list[i],number_list[min_index]print(number_list)

python 選擇排序

圖四