什么是选择排序呢?
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法
上面的呢是百度词条上的定义,但理解起来是什么样子呢?
如何理解选择排序?
其实选择排序顾名思义就是每一次选取数列中的一个值把它放到自己应该在的位置上
比如我们要将9,11,6,7,1,这个数列进行从小到大的排序,怎么做才能让这个数列中大的数字被选择走并安置在正确的位置上呢?
其实选择排序相对于其他排序算法是最好理解的一种,我们提前引入一个词叫做标记,在我们的筛选过程中我们把每次比较过程中的较小值标记出来但不进行交换用较小值与后面的值继续进行比较通过不断改变标记位置 将数列中最小值找到并标记出来最后将它放到第一个位置上,下次遍历数列是我们从他的下一个数字开始标记并遍历比较,从而将数列按照从小到大的顺序排好
我们的标记一开始在9开始循环
[9, 11, 6, 7, 1]
9和11比较比较后标记还是9没有变化继续比较
[9, 11, 6, 7, 1]
9和6比较后标记变为6但是数列不变
[9, 11, 6, 7, 1]
继续比较由于标记发生变化我们标记的6和7比较数列和标记都不变
[9, 11, 6, 7, 1]
继续比较6和1标记发生改变1被标记然后由于1是我们最后一个数字循环结束标记为被放到第一个位置
我们找出了列表中最小的元素1,接下来的遍历就从1的下一位开始找到
[1 , 11, 6, 7, 9]
1被我们放到了准确的位置上所以我们不需要对他进行任何操作了将它排除在外进行上述操作
[1, 11, 6, 7, 9]
[1 , 11, 6, 7, 9]
[1, 6, 11, 7, 9]
[1, 6 , 11, 7, 9]
[1, 6, 7, 11, 9]
[1, 6, 7, 11, 9]
随着越来越多的元素被放到准确的位置上我们就得到了完整的顺序数列
[1, 6, 7, 9, 11]
选择排序的python实现
#选择排序------
'''
顺序遍历数列找到最小值交换位置
选择排序的时间复杂度n**2
'''
list1=[9,11,6,7,1]
for i in range(0,len(list1)-1):
k=i#k作为遍历中记录最小值的标记
for j in range(i,len(list1)):
if list1[k]>=list1[j]:
k=j#比较大小使得标记永远指向最小值
list1[i],list1[k]=list1[k],list1[i]#交换最小值和当前遍历顺序位置把最小值放到正确位置上
print(list1)