选择排序

把最小的元素往最前面挪,挪完了就不管前面的,只看后面没有挪过的,然后就这样一直循环下去直到排序完成。

实践

1
2
3
4
5
6
7
8
9
10
11
12
def SelectionSort(nums):
nums = nums[:] # 创建副本,避免修改原始数据
for i in range(len(nums) - 1): # 最多 n-1 次就能完成排序
k = i # 先设当前最小的元素的位置为未排序区间的第一个
for j in range(i+1, len(nums)): # 遍历未排序区间
if nums[j] < nums[k]: # 如果未排序区间里的某个数比第一个数小就暂时把它定为最小的,遍历完 k 自然就是最小的了
k = j
nums[i], nums[k] = nums[k], nums[i] # 找到未排序区间里面最小的数之后就可以让它和未排序区间的第一个数交换,然后未排序区间就可以缩小了
return nums

# 测试
sort.test(SelectionSort)

流程图