選擇排序

選擇排序分爲升序或降序排列
兩兩比較大小,找出極值(極大值或極小值),而後放置到最後或最前
減小了交換次數,提升了效率,性能略好於冒泡排序性能

# 降序
# 第一輪,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/選擇排序code

相關文章
相關標籤/搜索