Java | ソートアルゴリズムの図解(バブルソート/選択ソート/高速ソートのイメージ)

Java Java
スポンサーリンク

ここでは バブルソート・選択ソート・クイックソート(高速ソート)イメージ図解(ASCII 図) を使って、初心者でも「何が起きてるか」が一瞬でわかるように説明します。


1. バブルソート(Bubble Sort)

直感イメージ

左右の値を「隣同士で比べて、順番が逆なら交換する」を 端から端まで繰り返す 方法。
大きい値がだんだん“泡のように”一番右へ上がっていく。

動く図解(例:[5, 3, 4, 1] を昇順に)

[5, 3, 4, 1]
 ↑  ↑
 5 と 3 を比較 → 入れ替え
[3, 5, 4, 1]

[3, 5, 4, 1]
   ↑  ↑
 5 と 4 を比較 → 入れ替え
[3, 4, 5, 1]

[3, 4, 5, 1]
      ↑  ↑
 5 と 1 を比較 → 入れ替え
[3, 4, 1, 5]   ← 最大値が右端に“浮いた”

次の周回(1 つ短く端まで比べる):

[3, 4, 1, 5]
 ↑  ↑
 3 と 4 → そのまま

[3, 4, 1, 5]
   ↑  ↑
 4 と 1 → 入れ替え
[3, 1, 4, 5]

まだ続くが最終結果は:

[1, 3, 4, 5]

特徴

  • わかりやすいが非常に遅い(O(n²))
  • 小規模なら問題なし

2. 選択ソート(Selection Sort)

直感イメージ

「配列の中から最小値を探して、先頭と交換」
次は「2 番目以降で最小値を探して、2 番目と交換」…を繰り返す。

動く図解(例:[5, 3, 4, 1])

1回目:全体から最小値「1」を探す

[5, 3, 4, 1]
 ↑       ↑
先頭      最小値1

→ 1 と 5 を入れ替え
[1, 3, 4, 5]

2回目:残り [3, 4, 5] から最小「3」を探す

[1, 3, 4, 5]
    ↑
このままでOK

3回目:残り [4, 5]

[1, 3, 4, 5]
       ↑
最小は4 → 交換不要

最終結果:

[1, 3, 4, 5]

特徴

  • 交換回数が少ない(最大 n 回)
  • しかし比較回数が多い(O(n²))
  • 実装が簡単で教科書的

3. クイックソート(Quick Sort)

※ “高速ソート” といえば普通これ。

直感イメージ

  1. 真ん中(pivot:基準値)を決める
  2. pivot より小さいグループ、大きいグループに分割(パーティション)
  3. その小グループ・大グループに対して 再帰的に同じことを繰り返す

「分割 → 分割 → … → 終わり」が基本形。

イメージ図(例:[5, 3, 8, 1, 4])

Pivot を 真ん中の「8」 とする例:

[5, 3, 8, 1, 4]
       ↑
     pivot(8)

小さいグループ: [5, 3, 1, 4]
大きいグループ: []

大きいグループは空なので、小グループを再帰:

[5, 3, 1, 4]
   ↑
 pivot = 1

小さい: []
大きい: [5, 3, 4]

また再帰:

[5, 3, 4]
   ↑
 pivot = 3

小さい: []
大きい: [5, 4]

また再帰:

[5, 4]
   ↑
 pivot = 4

小さい: []
大きい: [5]

すべて繋げると:

[1] + [3] + [4] + [5] + [8]

結果:

[1, 3, 4, 5, 8]

特徴

  • 平均 O(n log n) で非常に速い
  • Java の Arrays.sort は実際には「デュアルピボットクイックソート」などの高速な亜種を使っている

ここまでを一枚にまとめたイメージ

  • バブルソート:隣同士を何度も交換 → 大きい値が右端へ“泡上がり”
  • 選択ソート:最小値を探して前から確定 → 交換は少ない
  • クイックソート:pivot で分割して再帰 → とても高速
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました