# 選擇排序 (Selection sort) ## 簡介 分成已排序和未排序的陣列,在未排序的陣列中搜尋出最小的數字,之後加入到已排序陣列的最後一位。 選擇排序法在使用**交換模式下**為**不穩定排序法**。 選擇排序法在使用**插入模式下**為**穩定排序法**。 ## 舉例說明 假設使用選擇排序法將陣列中的值由小到大排序。 初始陣列為:[8,3,2,1,7,4,6,5] 那麼第一次排序時會由左至右在陣列中找到最小的值,並將之與第一個位置的值做交換,因此第一輪結束後的陣列為:[1,3,2,8,7,4,6,5]。 完整的排序結果如下圖所示: ![](https://i.imgur.com/6Djt5jk.png) ## 算法 1. 選擇排序一共有 n-1 輪排序。 2. 每一輪排序又是一個循環。 ### 循環的規則 1. 先假定當前這個數是最小數,然後和後面的每個數進行比較。 2. 如果發現有比當前數更小的數,就重新確定最小數,並得到索引值。 3. 當遍歷到陣列的最後時,就得到本輪的最小值和對應的索引。 4. 將目前的數與最小值交換。 ## 時間複雜度 假設今天要對一陣列使用選擇排序法由小到大排序。 ### 最佳:O(n^2^) ### 平均:O(n^2^) ### 最差:O(n^2^) 無論資料順序如何,都會執行兩個迴圈。 ## 參考資料 - [選擇排序法詳解](https://hackmd.io/@Aquamay/H1nxBOLcO/https%3A%2F%2Fhackmd.io%2F%40Aquamay%2FHy4Cwch9u)