ソート / Insertion Sort(挿入ソート)

整列済みの列へ
1要素ずつ差し込む。

新しい要素を 1 つ取り出し、左側の整列済み領域の適切な位置へ挿入します。ほぼ整列済みの入力では強いアルゴリズムです。

安定ソートin-placeほぼ整列済みに強い

目次

このページの目次

このページでわかること

先に知っておくポイント

1. 取り出した key を追う
2. 左へずらす要素を見る
3. 整列済み領域がどう広がるか

概要

概要

新しい要素を 1 つ取り出し、左側の整列済み領域の適切な位置へ挿入します。ほぼ整列済みの入力では強いアルゴリズムです。

考え方

擬似コード

for i = 1 to n - 1
  key = a[i]
  while j >= 0 and a[j] > key
    a[j + 1] = a[j]
  a[j + 1] = key

要点

要点まとめ

最良時計算量

O(n)

平均時計算量

O(n²)

最悪時計算量

O(n²)

安定ソートか

はい

補足

向いている場面と注意点

どこで効くか

すでにほぼ整列済みなら、左へ大きく動く要素が少ないため速くなります。

感覚

カードを手札に差し込む動きに近いです。

Bubble との違い

交換を連発するより、ずらして最後に挿入する発想です。

動きで確認

動きを見てたしかめる

ここでは「取り出した key を追う」を見ながら、上で読んだ内容を動きと結びつけます。

key比較中整列済み

次に見る

次に見るページ

比較すると違いがわかりやすいページを先に置いています。