选择排序
思想是在一个列表中每次循环一遍,拿到最小值,接着再从剩下的无序区中继续拿最小值,如此循环,直到结束。
时间复杂度为O(n^2)
# 最简单的一个选择排序,循环一个列表,拿到最小值,添加到一个新列表,之后在列表中删除这个最小值,继续再剩下的值中找最小值,往复循环。
def select_sort_simple(li):
new_li = []
for i in range(len(li)):
min_val = min(li)
new_li.append(min_val)
li.remove(min_val)
return new_li
这个算法有明显的缺点,因为是生成了两个列表,占用空间
正宗的选择排序
def select_sort(li):
for i in range(len(li)-1): # 需要选择n-1趟,最后一次不需要再找了
min_loc = i # 我们把每次得到的最小值放到第一位,刚开始假定最小值的索引就是i
# 剩下的无序区则为 i,len(i),顾头不顾尾
for j in range(i+1, len(li)):
# 接下来遍历无序区找比假定的min_loc的值还小的
if li[j] < li[min_loc]:
min_loc = j
# 如果最小值不是假定的i,一旦找到,交换最小值位置
if min_loc != i:
li[min_loc], li[i] = li[i], li[min_loc]
print(li)
li = [3, 2, 1, 4, 8, 7, 6, 5]
select_sort(li)