今回は paiza の「バブルソート」の問題に挑戦!
🧩 問題概要
・整数の配列が与えられる
→ 要素数 n と配列 A
・バブルソートで昇順に並び替える
→ 疑似コード通りに実装
・隣り合う要素を比較して交換する
・右から左へ順に処理する
→ 小さい値を左に移動させる
・1回のループで最小値が先頭に移動
・これを繰り返す
→ i = 0 〜 n-2
・各ループごとに配列を出力
→ 内側ループが終わった直後
・出力形式
→ スペース区切りで1行ずつ
→ 合計 n-1 行
入力例:
5
4 1 3 5 2
出力例:
1 4 2 3 5
1 2 4 3 5
1 2 3 4 5
1 2 3 4 5
✅OK例:
const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];
rl.on('line', line => lines.push(line));
rl.on('close', () => {
const n = Number(lines[0]);
const A = lines[1].split(' ').map(Number);
function bubble_sort(A, n) {
for (let i = 0; i <= n-2; i++) {
for (let j = n-1; j >= i+1; j--) {
if (A[j-1] > A[j]) {
[ A[j-1], A[j] ] = [ A[j], A[j-1] ]
}
}
console.log(A.join(' '));
}
}
bubble_sort(A, n);
});
🔍コードの流れ
・入力を受け取る
→ 1行目で要素数 n、2行目で配列 A を取得
・バブルソート関数を呼び出す
→ 配列 A と要素数 n を渡す
・外側のループ(i = 0 〜 n-2)
→ 「左から順に確定させていく」
・内側のループ(j = n-1 〜 i+1)
→ 右から左に向かって比較していく
・隣り合う要素を比較
→ A[j-1] と A[j]
・左の方が大きければ交換
→ A[j-1] > A[j] のとき swap
・これを繰り返すことで
→ 小さい値が左へ移動していく
・1回の外側ループで最小値が確定
→ A[i] に入る
・その時点の配列を出力
→ 各ステップの途中経過を表示
・これを最後まで繰り返す
→ 配列全体が昇順に完成
📝まとめ
バブルソートは、データ列の隣り合う要素を比較し交換することを繰り返すことによりデータ列をソートする手法。