选择排序思路
一趟遍历记录最小的数,放到第一个位置;
再一趟遍历记录剩余表中最小的数,继续放置;
import random from timewrap import timer # 查找最小值位置 def find_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i return min_pos @timer def select_sort(li): # i表示第i趟,也代表有序区最后一个元素的索引,无序区的范围从i到(n-1) for i in range(len(li)-1): # 默认最小值是无序区第一个数 min_pos = i # 循环没有排序好的元素组成的数列 # 没排序好的元素个数等于排好元素个数加1 # 也就是说有序区最后一个元素的索引加1,是无序区第一个元素 # 无序区索引范围 i+1 -- len(li) for j in range(i+1, len(li)): if li[j] < li[min_pos]: min_pos = j # min_pos = i,列表则不需要改变 if min_pos != i : li[i],li[min_pos] = li[min_pos],li[i] # 1 对列表li1排序 li1 = [8,2,3,4,1,5,6] select_sort(li1) print(li1) # 2 生成1万个随机数,进行排序 li2 = list(range(10000)) random.shuffle(li2) select_sort(li2) # 查看排序后结果 print(li2) # 时间复杂度:O(n*n)