經(jīng)典排序算法——選擇排序

選擇排序算法是一種原址比較排序算法。選擇排序大致的思路是找到數(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-90b6f9d4dcc2c846.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](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ù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容