1. 程式人生 > 實用技巧 >演算法學習:選擇排序

演算法學習:選擇排序

題目:給定一個數組[3,2,11,-9,0,12],如何將這個陣列進行排序,跌倒一個有序序列

排序過程

  1.選擇陣列中最小元素的索引(從0到length-1),和第一個元素(索引為0) 的兩個值交換位置:[-9,2,11,3,0,12]

  2.選擇陣列中最小元素的索引(從1到length-1),和第一個元素(索引為0) 的兩個值交換位置:[-9,0,11,3,2,12]

  3.選擇陣列中最小元素的索引(從2到length-1),和第一個元素(索引為0) 的兩個值交換位置:[-9,0,2,3,11,12]

排序思路總結

  1.選擇的次數為len(arr) :arr 為需要排序的陣列

  2.選擇的序列逐漸縮短

  3.找到最小元素的索引

Python程式碼

def selectSort(arr):
    length = len(arr)
    for i in range(length):
        min_value_index = i
        for j in range(i+1,length):
            if arr[j] < arr[min_value_index]:
                min_value_index = j
        arr[i],arr[min_value_index] = arr[min_value_index],arr[i]
    
return arr arr = [3,2,11,-9,0,12] print(selectSort(arr)) #[-9, 0, 2, 3, 11, 12]

時間複雜度:O(n^2)

補充:每次排序,元素相對位置都改變了,所以選擇排序是不穩定的。