アルゴリズム可視化

代表的なアルゴリズムを 動く Python コードステップ図 で理解しましょう。
各コードはこのページ上でそのまま実行できます。

ソートアルゴリズム

アルゴリズム時間計算量空間安定特徴
バブルソートO(n²)O(1)Yes隣接要素の比較・交換を繰り返す
選択ソートO(n²)O(1)No最小値を選んで先頭に置く
挿入ソートO(n²) / 最良O(n)O(1)Yes整列済み部分に1つずつ挿入
クイックソートO(n log n) 平均O(log n)Noピボットで分割して再帰
マージソートO(n log n)O(n)Yes分割して整列、マージで結合

バブルソート — 動きを目で見る

初期:  [5, 3, 8, 1, 4]
Pass1: 3 5 1 4 [8]    ← 最大の8が末尾へ
Pass2: 3 1 4 [5 8]    ← 5が定位置
Pass3: 1 3 [4 5 8]
Pass4: [1 3 4 5 8]    ← 完了
PYTHON
Output

      

クイックソート — 分割の様子

quicksort([6, 1, 7, 3, 4, 9, 2])
  pivot=3 → left=[1, 2]  middle=[3]  right=[6, 7, 4, 9]
    quicksort([1, 2]) → [1, 2]
    quicksort([6, 7, 4, 9])
      pivot=7 → left=[6, 4]  middle=[7]  right=[9]
        quicksort([6, 4]) → [4, 6]
結果: [1, 2, 3, 4, 6, 7, 9]
PYTHON
Output

      

マージソート — 分割と統合

PYTHON
Output

      

データ構造

スタック (LIFO) と キュー (FIFO)

スタック: 後入れ先出し
  push(A) → [A]
  push(B) → [A, B]
  push(C) → [A, B, C]
  pop()   → C        [A, B]

キュー: 先入れ先出し
  enq(A) → [A]
  enq(B) → [A, B]
  deq()  → A         [B]
PYTHON
Output

      

二分探索木 (BST)

挿入順: 5, 3, 8, 1, 4, 7, 9

        5
       / \
      3   8
     / \ / \
    1  4 7  9

中順走査 (in-order) で 1, 3, 4, 5, 7, 8, 9 と並ぶ
PYTHON
Output

      

グラフアルゴリズム

BFS(幅優先)と DFS(深さ優先)

グラフ:        A — B — C
                \  |  /
                 \ | /
                   D — E

BFS from A: A, B, D, C, E      (層ごとに探索)
DFS from A: A, B, C, D, E      (一本道を奥まで)
PYTHON
Output