演算法之LOWB三人組之選擇排序
阿新 • • 發佈:2018-11-05
選擇排序
思想是在一個列表中每次迴圈一遍,拿到最小值,接著再從剩下的無序區中繼續拿最小值,如此迴圈,直到結束。
# 最簡單的一個選擇排序,迴圈一個列表,拿到最小值,新增到一個新列表,之後在列表中刪除這個最小值,繼續再剩下的值中找最小值,往復迴圈。 def select_sort_simple(li): new_li = [] for i in range(len(li)): min_val = min(li) new_li.append(min_val) li.remove(min_val) return new_li 這個演算法有明顯的缺點,因為是生成了兩個列表,佔用空間
正宗的選擇排序
def select_sort(li): for i in range(len(li)-1): # 需要選擇n-1趟,最後一次不需要再找了 min_loc = i # 我們把每次得到的最小值放到第一位,剛開始假定最小值的索引就是i # 剩下的無序區則為 i,len(i),顧頭不顧尾 for j in range(i+1, len(li)): # 接下來遍歷無序區找比假定的min_loc的值還小的 if li[j] < li[min_loc]: min_loc = j # 如果最小值不是假定的i,一旦找到,交換最小值位置 if min_loc != i: li[min_loc], li[i] = li[i], li[min_loc] print(li) li = [3, 2, 1, 4, 8, 7, 6, 5] select_sort(li)