選擇排序算法是一種原址比較排序算法。選擇排序大致的思路是找到數(shù)據(jù)結(jié)構(gòu)中的最小值并將其位置放置第一位,接著找到第二小的值并將其放在第二位。
源碼:
this.selectionSort = function() {
var length = array.length; // {1}
var indexMin;
for (var i = 0; i < length - 1; i++) { // {2}
indexMin = i; // {3}
for (var j = i; j < length; j++) { // {4}
if (array[indexMin] > array[j]) { // {5}
indexMin = j; // {6}

](https://upload-images.jianshu.io/upload_images/1666407-afb0f3ec05185385.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
}
}
if (i !== indexMin) { // {7}
swap(array, i, indexMin);
}
}
}
首先聲明一些將在算法內(nèi)使用的變量(行{1})。外循環(huán)({2})迭代數(shù)組,并控制迭代輪次(數(shù)組的第n個(gè)值——下一個(gè)最小值)。
我們假設(shè)本迭代輪次的第一個(gè)值為數(shù)組最小值(行{3})。然后,從當(dāng)前i的值開(kāi)始至數(shù)組結(jié)束(行{4}),我們比較是否位置j的值比當(dāng)前最小值?。ㄐ衶5});是,改變最小值至新最小值,當(dāng)內(nèi)循環(huán)結(jié)束(行{4}),將得出數(shù)組第n小的值。最后,如果該最小值和原最小值不同(行{7}),則交換其值。

數(shù)組底部的箭頭指示出當(dāng)前迭代輪尋找最小值的數(shù)組范圍(內(nèi)循環(huán)行{4}),示意圖中的每一步則表示外循環(huán)。
個(gè)人理解:
其實(shí)和冒泡排序類(lèi)似,只不過(guò)是從最小值開(kāi)始查詢,依次變大,每一次外循環(huán)的內(nèi)循環(huán)輪次結(jié)束后都會(huì)得出當(dāng)前查找項(xiàng)范圍中的最小值元素的index,最后憑借index交換元素,將當(dāng)前輪次最小值位置確定下來(lái)。
變量i的值也代表了當(dāng)前已排序好的元素個(gè)數(shù)。