1、定义
1)理解
从整个序列中选择最小的放在最前面,再在选剩下的元素序列中选择最小的放在第二个位置,按照这个方法排序
那么如何选择最小的元素?
首先设0索引的为最小的,然后与之后的元素一个个比较,当遇到比当前元素小的元素时,将当前元素替换为更小的那个,直到将所有元素遍历完,这是0索引位置的为最小的元素;
将这个元素放在已排序好的元素区
然后在未排序的元素区中设1索引的元素为最小的,相同的方法寻找最小值;
直到将所有元素都排好
2)工作原理
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
- 然后再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾
- 以此类推,直到所有元素均排序完毕
2、python实现
def select_sort(alist):
n=len(alist)
for j in range(n-1):
# 作为前面不动,和后面的元素作比较的元素的循环
min_index=j
for i in range(j+1,n):
# 后面的元素与设定的最小元素一个个比较
# 从最小元素的后一个开始,因此为j+1,一直到最后,因此为n
if alist[min_index] > alist[i]:
min_index=i
alist[j],alist[min_index]=alist[min_index],alist[j]
if __name__ == '__main__':
list=[23,13,44,21,3,2,55,9,8]
print(list)
select_sort(list)
print(list)
结果:
[23, 13, 44, 21, 3, 2, 55, 9, 8]
[2, 3, 8, 9, 13, 21, 23, 44, 55]
时间复杂度
- 最优时间复杂度:O(n2)
- 最坏时间复杂度:O(n2)
- 稳定性:不稳定(考虑升序每次选择最大的情况)
- 在从小到大排序中,每次选择最大值放在最后,这样如果出现相同值,在排序后的序列中,两个相同值的前后顺序发生变化,因此是不稳定的