原文地址添加链接描述
每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引
每一轮找一个最小值,替换未排序部分最开始的值与标记的最小值
插入排序也是将序列分为前后两个部分,前面有序部分,后面无序部分
-
实现
def selectsort(alist): n = len(alist) for i in range(n-1): index_min = i for j in range(i+1, n): if alist[j]<alist[index_min]: index_min = j alist[i], alist[index_min] = alist[index_min], alist[i]
-
测试
if __name__ == '__main__': ll = [3,6,2,4,7,5,8,1,0] print(ll) selectsort(ll) print(ll)
-
时间复杂度
- 最优时间复杂度:O(n^2)
-
最坏时间复杂度:O(n^2)
- 稳定性:不稳定(考虑升序每次选择最大的情况)