选择排序分为升序或降序排列
两两比较大小,找出极值(极大值或极小值),然后放置到最后或最前
减少了交换次数,提高了效率,性能略好于冒泡排序
# 降序
# 第一轮,n个数从左至右,索引从0开始到n-1,两两依次比较,记录最大值的索引,此轮所有数比较完毕,将最大数和索引为0的数交换,如果最大数就是索引0,则不交换
# 第二轮,从索引1开始比较,找到最大值,将最大值和索引1位置交换,如果它就在索引1位置则不交换。以此类推,每次左边都会固定下一个最大数
t = [1, 9, 8, 5, 6, 7, 4, 3, 2]
for i in range(len(t) - 1):
# 假设进入循环的第一个数就是最大数
maxindex = i
# 两两比较,直到找出最大值,并记录最大值索引
for j in range(i+1, len(t)):
if t[j] > t[maxindex]:
maxindex = j
# 如果最大值不是当前第一个数,则将最大值与第一个数交换
if maxindex != i:
t[i], t[maxindex] = t[maxindex], t[i]
print(t)
# [9, 8, 7, 6, 5, 4, 3, 2, 1]
# 升序,改变一下判断条件即可
t = [1, 9, 8, 5, 6, 7, 4, 3, 2]
for i in range(len(t) - 1):
minindex = i
for j in range(i+1, len(t)):
if t[j] < t[minindex]:
minindex = j
if minindex != i:
t[i], t[minindex] = t[minindex], t[i]
print(t)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]