选择排序
选择排序的基本思路是通过循环找到乱序列表中最小的那个值,然后把最小的那个值跟列表中的第一个值交换位置
如上图所示第一次循环之后从列表中找到了最小的那个值并且把最小值跟第一个值交换,交换之后右边依然是乱序状态。
然后就从剩下的列表中在找到一个最小值跟列表中的第二个值交换位置,以此类推知道所有的元素排列完毕
代码思路
现在有一个列表 [64, 25, 12, 22, 11],我们一眼就能看出来最小的值是11对应的下标是4,但是计算机并不知道啊。即便是我直接告诉它它也不能信,它会选择自己去判断,毕竟计算机比较死板。
# 创建一个列表num_list
number_list = [64,25,12,22,11]
# 欺骗计算机最小的那个值对应64,对应的下标是0
min_index = 0
# 计算机选择相信自己循环挨个进行验证
for i in range(0,len(number_list)):
if number_list[min_index] > number_list[i]:
min_index = i
print(min_index)
可以看到循环之后计算机果然找到了最小值对应的下标是4
接下来就可以进行交换了,把下标为4的那个值交换到0号位置
# 找到最小的那个值之后把这个值交换到0号位
number_list[0],number_list[min_index] = number_list[min_index],number_list[0]
print(number_list)
经过刚才一套花里胡哨的操作后终于把最小值11放到了0号位置,但是剩下的数依然是乱序,因此还需要刚才的操作,因为0号位置已经确定,所以下次最小的那个值就应该放在1号位置了
for i in range(1,len(number_list)):
if number_list[min_index] > number_list[i]:
min_index = i
number_list[1],number_list[min_index] = number_list[min_index],number_list[1]
print(number_list)
12也被移动到了2号下标,剩下的代码思路都是一样的需要像刚才那样的循环至少还要写两次,像这种重复性的代码自然也是可以使用循环来简化代码的
最终代码
# 创建一个列表num_list
number_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)