アルゴリズム可視化
代表的なアルゴリズムを 動く 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
探索アルゴリズム
線形探索 vs 二分探索
配列: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] ← 探したい値: 11 線形探索: 先頭から順に比較 1≠11 3≠11 5≠11 7≠11 9≠11 11==11 ✓ (6回比較) 二分探索: 半分ずつ絞り込み 中央=9 11>9 → 右半分へ 中央=15 11<15 → 左半分へ 中央=11 11==11 ✓ (3回比較)
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