選擇排序可以說是眾多排序演算法中,最基礎、最直觀的乙個演算法了。
它的思想十分簡單:
遍歷列表,找出最小的乙個數,記下索引舉個例子:將最小的數新增到新的列表中,同時刪除原陣列中的數
重複第一步
假如現在有乙個無序陣列disorder_arr = [4,2,19,10,-1]
,和乙個空陣列order_arr =
第一步:
遍歷陣列
找到disorder_arr
中最小值-1
,並記下它的索引4
第二步:
將-1
新增到order_arr
中
得到order_arr = [-1]
第三步:
刪除掉disorder_arr
中的-1
得到disorder_arr = [4,2,19,10]
結束第一次迴圈
**重複上面的步驟 **
直到遍歷len(disorder_arr)
次
於是便可得到乙個有序陣列order_arr=[-1,2,4,10,19]
用python
來實現這個排序陣列
# selectionsort.py
class
solution
:def
selection
(self, disorder_arr:
list):
result_arr =
for i in
range
(len
(disorder_arr)):
min_index =
0for index, item in
enumerate
(disorder_arr)
:if item < disorder_arr[min_index]
:# 找到最小數
min_index = index
)# 將最小數新增進新的列表
disorder_arr.pop(min_index)
# 將原陣列中的最小數刪除,避免影響後續的判斷
return result_arr
一般的來說,衡量的乙個演算法的效能我們通常使用disorder_arr
待排序的陣列
result_arr
是乙個空陣列,將每次遍歷找到的最小數新增進來
min_index
最小數的索引
大o表示法
由於這裡使用了雙重for
迴圈,
因此它的時間複雜度
為o(n^2)
。
那麼它是乙個穩定的演算法嗎?
關於選擇排序是否穩定這一點,不同的書裡有不同的看法。
我覺得這點得根據具體的實現來看,
本文所給出的將最小的數插入到乙個新的陣列
這種實現方式符合穩定演算法的定義。
其他的實現方法,例如將當前值與最小值互換
的這種實現方法則是不穩定的。
將當前值與最小值互換
這種實現方法與本文的實現方法類似,就不單獨列出了。
感興趣的同學可以上我的github來取
選擇排序 演算法系列
選擇排序 思想 選擇排序的思想也非常簡單,就是從一堆數中選出最小值,然後和頂部元素互換,之後再用同樣的方法排序剩餘的數,最終得到排序的結果。using system using system.collections.generic using system.linq using system.tex...
排序演算法系列之選擇排序 2
選擇排序原理 在長度為nd 陣列中,找到位置不適合的元素,直接放入最終合適的位置上,也就是依次在未排序陣列中找到最小元素,直到最後乙個元素位置 剩下的最後乙個元素n 2最大,無需操作 每輪從無序陣列中找到的最小資料,依次放入到從data 0 到data n 2 中 優點 賦值次數少 缺點 忽略了資料...
排序演算法系列
概述 概念 排序是計算機內經常進行的一種操作,其目的是將一組 無序 的記錄序列調整為 有序 的記錄序列。排序分為內部排序和外部排序。若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。反之,若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問題為外部排序。排...