素朴なソートアルゴリズムメニュー【選択ソート】
【選択ソート】コード 1/2
reader.on('close', () => {
const selection_sort = (A, N) => {
for (let i = 0; i < N - 1; i++) {
let min = A[i]; // A[i] を 最小値と仮定
let min_index = i; // i を最小値の添字と仮定
for (let j = i + 1; j < N; j++) {
if (A[j] < min) { // A[j] が 仮最小値より小さければ…
min = A[j]; // 仮最小値を A[j] とする
min_index = j; // j を最小値の添字とする
}
}
[A[i], A[min_index]] = [A[min_index], A[i]]; // A[i] と 最小値を入替
console.log(...A); // A[i] までソート処理終了時の配列を出力
}
};
const n = Number(lines[0]); // 要素数
const arr = lines[1].split(' ').map(Number); // ソートする要素
selection_sort(arr, n);
});
選択ソート…。とりあえず 解説どおり実装しました。最小値を探索して A[i] と最小値を入れ替えれば最終的に昇順に並べ替えられました。
【選択ソート】コード 2/2
reader.on('close', () => {
const selection_sort = (A, N) => {
for (let i = 0; i < N - 1; i++) {
const Min = Math.min(...A.slice(i)); // A[i] ~ A[N - 1] の最小値
const min_index = A.slice(i).indexOf(Min) + i; // A[i] ~ A[N - 1] の最小値 の A の添字
[A[i], A[min_index]] = [A[min_index], A[i]]; // A[i] と A[i] ~ A[N - 1] の最小値を入替
console.log(...A);
}
};
const n = Number(lines[0]); // 要素数
const arr = lines[1].split(' ').map(Number); // ソートする要素
selection_sort(arr, n);
});
こっちのほうがスッキリ書けるけど 実行時間は同じでした。
コメント