基本情報技術者試験の「科目B」で多くの受験生が最初につまずくのが、バブルソートの変数の動き(トレース)です!
「頭の中で配列の数字を入れ替えていたら、どこまで比較したか分からなくなった…」
「ループ処理(for文やwhile文)の中で変数 i や j がどう変化しているのか追えない…」
そんな悩みを持つ未経験・文系受験生のために、当サイトでは変数の値や配列の動きがひと目でわかるビジュアルシミュレーターを用意しました!
まずは実際に動かしながら、バブルソートのアルゴリズムとプログラムの連動感を体感してみましょう。
1. 【動く図解】ステップ進むボタンでトレースを擬似体験してみよう
下の「ステップ進む ➔」ボタンを押すと、実行中のコード行がハイライトされ、配列要素の比較や入れ替えがリアルタイムに変化します。
配列 num の変化
2. バブルソートとは?仕組みをシンプルに理解する
バブルソート(泡ソート)は、「隣り合う要素を比較して、大小関係が逆なら入れ替える」という操作を繰り返す整列アルゴリズムです。
水中で泡(Bubble)が上に浮かび上がっていくように、配列の中で一番大きい(または小さい)値が端っこへ移動していくことからこの名前がついています。
バブルソートの基本ルール(昇順の場合)
- 配列の先頭から順番に、隣り合う2つの数(例:a[j] と a[j+1])を比べる。
- 左の方が大きければ、2つの位置を「入れ替える(スワップ)」。
- これを端まで行うと、一番大きな値が配列の一番右(末尾)に確定する。
- 確定した部分を除いて、1〜3の操作を繰り返す。
3. 科目Bで超頻出!「変数tmpを使った値の入れ替え(スワップ)」の罠
シミュレーターのコード(Line 4〜6)にある以下の3行は、基本情報技術者試験(科目B)で必ずと言っていいほど出題される「2つの変数の値を入れ替える定型パターン」です。
Line 4: tmp = num[j](一時避難用の箱 tmp に左の値を預ける)Line 5: num[j] = num[j + 1](左の箱に、右の値を上書きする)Line 6: num[j + 1] = tmp(右の箱に、預けていた値を戻す)
プログラミング未経験の方が陥りがちな罠として、num[j] = num[j + 1] と num[j + 1] = num[j] のように直接入れ替えようとしてしまうケースがあります。しかし、最初に上書きした時点で元の num[j] の値が消えてしまうため、仮の変数 tmp(temporary = 一時的) を経由させる必要があるのです。
穴埋め問題で「どの変数をどの順番で代入しているか」を問われることが多いため、シミュレーターで Line 4〜6 を実行した際の変数 tmp の動きをしっかりイメージできるようにしておきましょう。
4. 試験本番(紙とペン)でバブルソートを解くコツ
試験本番ではシミュレーターを使えません。紙の上でトレースする際は、以下のステップで手書きするのがコツです。
- 配列の状態を横一列に書き出す(例: [5, 3, 8, 2])
- 比較する2つの数値の下に波線を引く
- 入れ替えが発生したら、下に矢印を引いて新しい配列を書き直す
- 確定した数値(一番右)には「〇」をつけて、次のループの対象から外す
頭の中だけで追おうとせず、「1回のループごとに新しい配列の状態を余白に書き写す」ことが、計算ミスを防ぐ最大の近道です。
5. バブルソートに関するよくある質問(FAQ)
Q. バブルソートの計算量はどれくらいですか?
A. 計算量は O(n^2) です。要素数が多くなると処理時間が一気に増えるため、実際の開発で大量のデータを並び替える際にはあまり使われませんが、アルゴリズムの基礎学習としては最適です。
Q. 「降順(大きい順)」にしたい場合はどこを変えればいいですか?
A. if (num[j] > num[j + 1]) の比較演算子を if (num[j] < num[j + 1]) に変更するだけで、降順のバブルソートになります。
まとめ:バブルソートは「確定した位置」を意識しよう
バブルソート攻略のポイントは、「1周(外側ループ1回)終わるごとに、端から順番に値が確定していく」という特性を掴むことです。
シミュレーターを何度も動かして変数の変化パターンを頭に焼き付けたら、ぜひ過去問の類似問題にもチャレンジしてみてください!

コメント