排序演算法系列 選擇排序

2021-10-01 05:31:07 字數 1930 閱讀 3128

選擇排序可以說是眾多排序演算法中,最基礎、最直觀的乙個演算法了。

它的思想十分簡單:

遍歷列表,找出最小的乙個數,記下索引

將最小的數新增到新的列表中,同時刪除原陣列中的數

重複第一步

舉個例子:

假如現在有乙個無序陣列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 中 優點 賦值次數少 缺點 忽略了資料...

排序演算法系列

概述 概念 排序是計算機內經常進行的一種操作,其目的是將一組 無序 的記錄序列調整為 有序 的記錄序列。排序分為內部排序和外部排序。若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。反之,若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問題為外部排序。排...