Python實現選擇排序

算法介紹

選擇排序(Selection Sort)是一種簡單直觀的排序算法。冒泡排序每比較一次就可能交換一次,但是選擇排序是將一輪比較完後,再把最小的放到最前的位置(或者把最大的放到最後)。

選擇排序的流程爲:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對N個元素進行排序最多交換N-1次。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

代碼實現

def selectionSort(source):
    # 進行n-1次選擇操作
    for i in range(len(source) - 1):    
        min = i    # min存放最小值的下標,初始設爲i
        for j in range(i, len(source)): 
            if source[j] < source[min]: 
                min = j     # 更新最小值的下標
        if i != min:
            #將最小值放到下標i的位置
            source[min], source[i] = source[i], source[min] 
    return source

s = [8,6,13,7,17,1,4,5,2]
print(selectionSort(s))
# 輸出:
# [1, 2, 4, 5, 6, 7, 8, 13, 17]

算法效率分析

最優時間複雜度:O(N2)
最壞時間複雜度:O(N2)
平均時間複雜度:O(N2)
空間複雜度:O(1)
穩定性: 假設a=b,且a在b前面,而某輪選擇中最小值在b後面,當a恰好在開頭時,交換過後b就在a前面了,所以選擇排序是不穩定的。給個例子([6,5,4,6,2])自己體會。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章