Alg1.1. 選擇排序法


以由小到大排序一個數值串列為例,選擇排序法以循序的方法,依序來搜尋一個串列中最小的數值。在每一回合中都會確定一個最小的數值,再從原來「未排序」的串列中取出該數值及存入另一個「已排序」的串列中。最後,經過 n 個回合之後,例如:n 是串列長度或資料筆數,就可以將資料由小到大排序完成。

# 定義函數
def find_smallest(data):
    smallest = data[0]                           # 以串列索引值0的數值為目前的最小值
    smallest_index = 0

    for i in range(1, len(data)):                # 從串列索引值1開始搜尋整個串列
        if data[i] < smallest:                   # 如果目前的數值比目前的最小值還小時
            smallest = data[i]                   # 將該數值存入最小值變數中
            smallest_index = i                   # 同時也記錄最小值在串列中的索引值

    return smallest_index


def selection_sort(data):
    sorted_data = []

    for i in range(0, len(data)):                # 執行 n 次循序搜尋
        smallest = find_smallest(data)           # 搜尋該回合最小的數值
        sorted_data.append(data.pop(smallest))   # 將最小的數值存入「已排序」的串列中

    return sorted_data


# 呼叫函數
data = [5, 3, 6, 2, 10]
print(data)
print(selection_sort(data))


# 執行結果
[5, 3, 6, 2, 10]
[2, 3, 5, 6, 10]

躍躍欲試

參考資料

  • 寫程式前就該懂的演算法, 第二章, Aditya Y.Bhargava著, 張書華譯, 松崗, ♥️

results matching ""

    No results matching ""