1. 程式人生 > >演算法之LOWB三人組之選擇排序

演算法之LOWB三人組之選擇排序

選擇排序

思想是在一個列表中每次迴圈一遍,拿到最小值,接著再從剩下的無序區中繼續拿最小值,如此迴圈,直到結束。

# 最簡單的一個選擇排序,迴圈一個列表,拿到最小值,新增到一個新列表,之後在列表中刪除這個最小值,繼續再剩下的值中找最小值,往復迴圈。
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)

gai

看這個的查詢步驟,先把第一次的3作為了最小值,然後去迴圈剩下的[2,1,4,8,7,6,5],一旦找到了1
就把1和3的位置進行了調換,得到了[1,2,3,4,8,7,6,5]
此時最小值為2,過,最小值為3,過,最小值為4,過
直到最小值為8,5和8調換,最小值7,6和7掉換,最後一位不走,程式結束