本文將詳細說明關鍵變量的做用,結合代碼進行梳理python
使用語言:python數組
選擇排序的過程markdown
如下疑問:ui
誰來界定有序無序的分割位置?spa
答:外層循環的 i :無序序列的第一個數字的下標code
誰去找無序序列的最小(大)值?orm
答:內層循環的 j :遍歷無序序列,對應最小(大)值的下標,所以 j 的遍歷區間也就是 [i+1,len(arr))
(左閉右開)排序
誰來保存每次找到的最小值的索引?教程
答:minIndex :若 j 找到了更小(大)的值,會 minIndex=j
,記錄最新的最小(大)值的下標索引
選擇排序的代碼 (代碼是採用的菜鳥教程的示例代碼,是升序排序)
def selectionSort(arr):
for i in range(len(arr) - 1):
# 記錄最小數的索引
minIndex = i #假設當前最小值的索引就是i,這只是假設的
for j in range(i + 1, len(arr)): #j去找無序序列的最值
if arr[j] < arr[minIndex]: #找到了更小的!
minIndex = j #趕忙將更小值的索引更新給minIndex
''' 好啦,如今j已經找完無序序列啦,由於一開始i是假設的最小值的索引,並將這個假設的最小值的索引i賦給了minIndex 因此咱們如今來看看i是否和minIndex還相同(即下面的if過程) 若是相同,就意味着minIndex根本沒有改變,即j沒有找到更小值 若是不相同,就意味着j找到了更小值,並將更小值的索引j賦給了minIndex,minIndex更新了 才致使了minIndex和初始值i不同了,由於找到了更小的值 接下來交換arr[i]和arr[minIndex] (與無序序列的第一個數字交換) if i != minIndex: arr[i], arr[minIndex] = arr[minIndex], arr[i] return arr 複製代碼
排序舉例:
待排序列: 43,65,4,23,6,98,2,65,7,79
第一趟: 2,65,4,23,6,98,43,65,7,79
第二趟: 2,4,65,23,6,98,43,65,7,79
第三趟: 2,4,6,23,65,98,43,65,7,79
第四趟: 2,4,6,7,43,65,98,65,23,79
第五趟: 2,4,6,7,23,65,98,65,43,79
第六趟: 2,4,6,7,23,43,98,65,65,79
第七趟: 2,4,6,7,23,43,65,98,65,79
第八趟: 2,4,6,7,23,43,65,65,98,79
第九趟: 2,4,6,7,23,43,65,65,79,98
結束
複製代碼