ソートアルゴリズム可視化

7種類のソートが、どう並べ替えるかをアニメーションで見られます。アルゴリズムを切り替えると、同じデータでも「比較した回数」「交換・移動回数」が大きく違うのが分かります。音をオンにすると、整列の様子が音でも聞こえます。

比較した回数
0
交換・移動回数
0
いま何をしているか

7つのソートの違い

大きく「単純なソート(計算量 O(n²))」と「高速なソート(O(n log n))」に分かれます。同じデータでアルゴリズムを切り替え、比較回数・交換移動回数を見比べてみてください。手数の差がはっきり出ます。

単純ソート O(n²)
バブルソート … 隣り合う2つを比較し、大きい方を後ろへ送る。一番分かりやすいが交換は多め。
選択ソート … 未整列の中から最小値を探して先頭に置く。比較は多いが交換回数が少ない
挿入ソート … トランプを手札に挿す動き。ほぼ整列済みのデータには非常に速い
シェルソート … 挿入ソートの改良版。離れた間隔で粗く整列してから間隔を詰める。単純ソートの中では速い。

高速ソート O(n log n)
クイックソート … 基準値(ピボット)より大小で2つに分割するのを繰り返す。実用上もっとも速い部類。ピボットが偏ると最悪 O(n²)。
マージソート … 半分に分割して、整列済み同士を併合(マージ)する。常に O(n log n) で安定だが、別の配列を使うのでメモリを多く使う(このツールで「交換」でなく「書き込み」で並ぶのはこのため)。
ヒープソート … ヒープという木構造を使って最大値を順に取り出す。追加メモリがほぼ不要で最悪も O(n log n)。

なぜ計算量を学ぶのか

単純ソートは、データが n 個あると比較がおよそ n² 回必要です(本数スライダーを増やすと、棒が増えた以上に手数が跳ね上がるのが分かります)。データが10個なら100回程度ですが、1万個なら1億回。一方 O(n log n) のソートは1万個でも約13万回で済みます。クイック・マージ・ヒープに切り替えて、同じ本数でも手数が桁違いに少ないことを確かめてみてください。「どのアルゴリズムが何回の手数で済むか」を見積もる力が、計算量の考え方です。

基本情報技術者試験ではこう出る

科目B(アルゴリズムと擬似言語)で、ソートや探索のコードを読んで「比較・交換が何回行われるか」「ループが何回まわるか」をトレースする問題が出ます。科目Aでは各ソートの計算量(オーダー)や特徴(安定ソートか、最悪計算量はいくつか)が問われます。本ツールで「動き」と「手数」を体に入れておくと、コードのトレースが格段に読みやすくなります。

豆知識:実際のプログラムは何を使う?

バブルソートは学習用で、現実のソフトウェアではまず使いません。例えばJavaで Arrays.sort() を呼ぶと、内部ではプリミティブ配列にはデュアルピボット・クイックソートオブジェクト配列にはティムソート(マージソートと挿入ソートの組み合わせ)という、高度に最適化されたアルゴリズムが動いています。「まずバブルソートで仕組みを理解し、本物は何を使っているかを知る」——この順番が、基礎から実務への橋渡しになります。

よくある質問

Q. 音が鳴りません。
A. 「音」のチェックを入れてから「再生」を押してください。ブラウザの仕様で、最初にボタンを押した操作をきっかけに音が有効になります。

Q. もっと速く/ゆっくり見たい。
A. 「速さ」スライダーで調整できます。「1手進む」を使えば、1ステップずつじっくり確認できます。