选择排序

选择排序分为升序或降序排列
两两比较大小,找出极值(极大值或极小值),然后放置到最后或最前
减少了交换次数,提高了效率,性能略好于冒泡排序

# 降序
# 第一轮,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]

参考:
https://zh.wikipedia.org/wiki/选择排序

posted @ 2018-08-22 13:51  KeithTt  阅读(155)  评论(0编辑  收藏  举报