本文将详细说明关键变量的做用,结合代码进行梳理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
结束
复制代码