Python實現選擇排序
阿新 • • 發佈:2018-12-09
演算法介紹
選擇排序(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])自己體會。