← → でコマ送り、Space で再生/停止、P で投影モード
fibdef fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
binary_searchL, R = 0, len(a) - 1
while L <= R:
M = (L + R) // 2
if a[M] == target: return M
elif a[M] < target: L = M + 1
else: R = M - 1
return -1
merge_sortdef merge_sort(a):
if len(a) <= 1: # ベースケース
return a
mid = len(a) // 2 # 分割
L = merge_sort(a[:mid]) # 左半分を再帰的にソート
R = merge_sort(a[mid:]) # 右半分を再帰的にソート
return merge(L, R) # 統治(マージ)
quick_sortdef quick_sort(A):
if len(A) <= 1:
return A
pivot = A[0] # 先頭をピボットに
less = [x for x in A[1:] if x < pivot] # 基準より小さい山
more = [x for x in A[1:] if x >= pivot] # 基準以上の山
return quick_sort(less) + [pivot] + quick_sort(more)
—
insertion_sortfor i in 1 .. n-1:
key = a[i] # 取り出す
j = i - 1
while j >= 0 and a[j] > key: # 比較
a[j+1] = a[j] # 後ろへずらす
j -= 1
a[j+1] = key # 挿入
個数×サイズ がいつも n になることを順に見せます。n²
—
n log₂ n
—
横幅は同じ n、縦の高さがそれぞれ n(バブル)と log₂ n(マージ)。 n が大きくなるほどマージの縦が薄くなる。
| n | O(n²):n(n−1)/2 回 | O(n log n):n⌈log₂ n⌉ 回 | 比 (n²/n log n) | n² の時間 | n log n の時間 |
|---|
insertdef insert(node, v):
if node is None: # 空 → ここに新規
return Node(v)
if v == node.val: return node # 重複は無視
if v < node.val: # 小さい → 左へ
node.left = insert(node.left, v)
else: # 大きい → 右へ
node.right = insert(node.right, v)
return node