選擇排序,簡單的來說就是在一組無序的列表中,把這組列表中的數看作兩部分(一部分有序的,一部分無序的)。先遍歷一遍,找出最小的那個,然後把它放到最前面,接着再遍歷除了那個最小的數,在剩下的數中,再找出最小的數,放到第二位,依次循環,直到列表裏的數字全部排序完畢。
def select_sort(list):
n = len(list)
for i in range(n-1): # 這層循環控制遍歷的次數,只要遍歷到倒數第二位就行了
"""這是假設的最小值,只要和後面一次循環比,如果比他小的話,就交換位置,直到換出真正小的,然後放到排好序的位置上"""
min_index = i # 最小值索引,從0開始,然後和後面的沒有排序的比較就行了
for j in range(i+1,n): # 這層循環就是遍歷剩下的爲排序的,所以從i+1開始,也就是排好序的後面一位開始
if list[min_index] > list[j]: # 如果發現後面無序的數字中,有比這個所謂的最小值還小的,則交換位置
min_index = j
list[min_index], list[j] = list[j], list[min_index] # 遍歷完這一趟,得到的最小值,再交換位置
list = [5, 2, 3, 7, 9 ,0]
select_sort(list)
print(list)
選擇排序的最壞時間複雜度和最好時間複雜度都是O(n^2),因爲就算是排好序的列表,他也要一次一次比,比完了,放到排好序的位置上,所以最壞和最好都是一樣的。