选择排序的思路较好理解,先将列表便利一遍找到最小(最大)的数放在第一位,然后遍历剩余列表元素找出最小(最大)的数放在第二位...一次类推,这就像他的名字一样,每次便利都选择最小(最大)的数放在对应的位置。
下面我用动图给大家演示一下。
是不是更好理解了呢(●'◡'●)
当然具体的实现也不难,接下来我用代码给大家实现一下。
def select_sort(lst): for i in range(len(lst)-1): min_loc=i # 假定最小位置为i for j in range(i,len(lst)): # 无序区 if lst[j]<lst[min_loc]: min_loc=j lst[i],lst[min_loc]=lst[min_loc],lst[i] #交换位置 return lst lst=list(range(1,10)) import random random.shuffle(lst) print(lst) select_sort(lst) print(lst)
#使用random的shuffle方法打乱列表
用i来代替无序区的位置,假设i就是最小数的位置(但其实并不是)将它赋值给min_loc,循环剩下列表(无序区)的元素找出最小(最大)的数的下标,循环完毕时可以确定了最小位置的下标,将他赋值给给min_loc,这时min_loc是真正的最小位置,然后lst[min_loc]与lst[i]交换即可,为什么使用交换呢?原列表元素交换是原地排序,可以节省空间哟,往后同理。循环结束列表即排序完成。
结果为:
当然,为了更好的体现这个过程我们可以在每次循环结束后打印一下这个列表看看改动的地方
def select_sort(lst):
for i in range(len(lst)-1):
min_loc=i # 假定最小位置为i
for j in range(i,len(lst)): # 无序区
if lst[j]<lst[min_loc]:
min_loc=j
lst[i],lst[min_loc]=lst[min_loc],lst[i] # 交换位置
print(lst) # 改动在这里哦
return lst
结果为:
选择排序就是这样啦!
🌸🌸🌸🌸🌸🌸完结撒花!🌸🌸🌸🌸🌸🌸
如有疑问或错误,欢迎大家评论区留言指出,谢谢支持!!