顯示具有 排序演算法 標籤的文章。 顯示所有文章
顯示具有 排序演算法 標籤的文章。 顯示所有文章

2020年4月14日 星期二

Python 資料結構 - Selection sort 選擇排序法


之前介紹過氣泡排序法與插入排序法,

沒錯,

今天就來介紹另一種排序法:

Python 資料結構 - Selection sort 選擇排序法



Selection sort 選擇排序法是從未排序的序列中,

選擇第一個元素開始找出最小值(或最大值)後,

將其排至開始排序的位置,

接著從第二個位置重複上述步驟,

直到選到最後一個元素為止。

範例程式如下:

def selection_sort(sample_list):
    for i in range(0, len(sample_list)):
        for j in range(i+1, len(sample_list)):
            target = sample_list[j]
            if target < sample_list[i]:
                sample_list[j], sample_list[i] = sample_list[i], sample_list[j]

        print(i, sample_list)


sample = [4, 7, 13, 3, 8, 55, 32]
selection_sort(sample)

執行的結果為:


如果這樣還是不清楚沒關係,

使用底下範例中的控制按鈕,

並注意程式在記憶體中的變化:


這就是今天的主題:

Python 資料結構 - Selection sort 選擇排序法

2020年4月1日 星期三

Python 插入排序法範例 Insertion Sort


之前介紹過Python 氣泡排序法範例,

今天要來介紹另一種排序方法:

Python 插入排序法範例 Insertion Sort

插入排序法將資料分成已排序、未排序,

以由小到大排序為範例,

依序由未排序中的資料中選值,

插入到已排序中的位置,

從選定值的位置反向比較回來,

若在已排序位置中遇到的值大於等於選定的值,

將在已排序位置中遇到的值右移


用說明得很抽象,

直接利用範例程式實際演練一次,


透過 Back 與 Forward 按鈕,

能夠觀察目前選定的值以及現有 list 中的變化,

當今天遇到的值比選定的值大的時候,

就將數列往後移一格,

這就是今天的主題:

Python 插入排序法範例 Insertion Sort

最後附上插入排序法的範例程式碼:


test_data = [12, 9, 100, 87, 200, 5, 300]

for i in range(1, len(test_data)):
    target = test_data[i]
    j = i - 1    while j >= 0 and target < test_data[j]:
        test_data[j + 1] = test_data[j]  # 右移        j = j - 1
    test_data[j + 1] = target
    print("Round %d : %s" % (i, test_data))