自從算法課結課後就不多系統地學習、總結算法相關的知識了,因此但願以文章記錄算法,進行總結。所記錄的算法均學習自《算法(第4版)》,此書代碼採用Java編寫,本人使用js復現。算法
選擇排序的思想很是簡單:數組
首先,找到數組中最小的那個元素,其次,將它和數組的第一個元素交換位置(若是第一個元素就是最小元素那麼它就和本身交換)。再次,在剩下的元素中找到最小的元素,將它與數組的第二個元素交換位置。如此往復,直到將整個數組排序。這種方法叫作選擇排序,由於它在不斷地選擇剩餘元素之中的最小者。
——《算法(第四版)》less
此算法的實現很是簡單,如下爲排序的核心代碼學習
sort(array) {
for (let i = 0; i < array.length; i++) {
//遍歷元素下標
let minIndex = i;
let j = i + 1;
for (; j < array.length; j++) {
//尋找最小值
if (this.less(array[j], array[minIndex])) {
minIndex = j;
}
}
this.exch(array, i, minIndex);
}
}
複製代碼
所有代碼於CodePen之中:
CodePen打開this
選擇排序很是簡單,咱們也能夠發現有兩個特色:spa
爲了找出最小的元素而掃描一遍數組並不能爲下一遍掃描提供什麼信息 ——《算法(第四版)》code
不管數據的初始狀態如何,選擇排序都會將全部元素進行遍歷。所以,不管輸入數據是排序好的數組仍是隨機數組,其運行時間都是相同的。此算法不善於利用輸入的初始狀態cdn
每次交換都會改變兩個數組元素的值,所以選擇排序用了N次交換——交換次數和數組大小是線性關係。 ——《算法(第四版)》blog
選擇排序很是簡單。沒撒好說。🤖排序
《算法(第四版)》