選擇排序分爲升序或降序排列
兩兩比較大小,找出極值(極大值或極小值),而後放置到最後或最前
減小了交換次數,提升了效率,性能略好於冒泡排序性能
# 降序 # 第一輪,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]