医学生わくばの欲張り技術ブログ

〜E資格を取りに行く!〜

【アルゴリズム(JS実装)】Selection Sort

  どうも、わくばです!

 

 今日はSelection Sort を学びました。今回はシンプルです。

 アルゴリズムの説明はこのサイトが非常にわかりやすいのでぜひ:Selection Sort - InterviewBit

 

 コードはこんな感じになりました。

function selectionSort(array, size){
    const { length } = array;
    for (let i=0; i< length; i++){
        let minIdx = i;
        for(let j =i+1; j < length; j++){
            if(array[i]>array[j]){
                minIdx = j;
            }
        }
        [array[i], array[minIdx]] = [array[minIdx], array[i]];
    }
    return array;
}

  実行してみると 

let data = [-2, 45, 0, 11, -9]
selectionSort(data, data.length)

[-9, -2, 0, 11, 45]

  機能しています。

 

Complexityはスワップし終えたものは比較対象から減っていくので

$$(n-1)+(n-2)+...+2+1=\dfrac{n(n-2)}{2}$$

これは概算すると\(O(n^2)\)になります。ループが二重なので直感的にも納得です。(Big O notationを知らない方のために一応コメントしておくと、Big O notationはあくまで複雑性の指標であって正確な計算値ではありません。処理の複雑さ的に\(O(n^2)\)とすると定性的に理解できて良いですね、というものです。)

 

今日は以上です。E資格の勉強引き続き頑張ります。あ、あと医学も!(笑)

 

では。