1. 程式人生 > >Python 十大排序---選擇排序

Python 十大排序---選擇排序

轉載自: https://blog.csdn.net/zhaobig/article/details/78607714
作者:納爾遜皮卡丘
來源:CSDN
原文:https://blog.csdn.net/zhaobig/article/details/78607714
版權宣告:本文為博主原創文章,轉載請附上博文連結!

選擇排序(Selection sort)
選擇排序:一種簡單直觀的排序演算法。

工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小(大)元素,然後放到已排序的末尾。直到所有元素均排序完畢。

優點:選擇排序與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有一個將被一道其最終位置上,因為對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

使用Python程式碼實現選擇排序:

list 傳遞的引數,order排序 預設為1,升序,否則降序,僅支援整數型別

def selectsort(list, order=1):
if not isinstance(order, int):
raise TypeError(‘order型別錯誤’)
for i in range(len(list) - 1):
# 記錄最小位置
min_index = i
# 篩選出最小資料
for j in range(i + 1, len(list)):
if order == 1:
if list[j] < list[min_index]:
min_index = j
else:
if list[j] > list[min_index]:
min_index = j
# 交換位置
if min_index != i:
list[i], list[min_index] = list[min_index], list[i]
print list

selectsort([1, 4, 9, 6, 3, 100], 1)
時間複雜度:
最優時間複雜度:O(n^2)

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

穩定性:不穩定(考慮升序每次選擇最大的情況)

動態圖演示:
https://img-blog.csdn.net/20171122201647205?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2JpZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
在這裡插入圖片描述