Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説

この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。

挿入ソートのアルゴリズム

挿入ソートは以下の手順で動作します。

  • 入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。
  • 現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。
  • キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。
  • 具体的には、ソート済み配列内でキーより大きいすべての要素を一つずつ右側へシフトすることで、正しい位置を作り出します。

この流れを図で表すと、以下のようになります。

Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説

それでは、実際の実装を見ていきましょう。

実装例

def insertionSort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        # keyより大きいarr[0..i-1]の要素を
        # 現在位置より一つ後ろへ移動させる
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

# メイン処理
arr = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l']
insertionSort(arr)
print("ソート後の配列:")
for i in range(len(arr)):
    print(arr[i])

実行結果

ソート後の配列:
a
i
l
o
r
t
t
u

文字列のリストも問題なくアルファベット順にソートできていることがわかります。

計算量

時間計算量: O(n²) — 最悪の場合(逆順のデータ)、すべての要素について比較とシフトが発生します。一方、ほぼソート済みのデータに対しては高速に動作し、最良ケースではO(n)になります。

補助記憶域(空間計算量): O(1) — ソートは元の配列内で完結するインプレース処理のため、追加のメモリはほとんど不要です。

下の図のように、すべての変数はグローバルフレーム上で宣言・管理されます。

Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説

まとめ

この記事では、挿入ソートの基本的な仕組みと、Python 3.x(およびそれ以前のバージョン)での実装方法を学びました。挿入ソートは小規模なデータセットやほぼ整列済みのデータに対して有効なアルゴリズムであり、クイックソートなどの高度なソートの一部としても利用されることがあります。ぜひ自分のコードでも試してみてください。

  1. Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説

    本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体

  2. Pythonで学ぶ挿入ソート(Insertion Sort)の仕組みと実装方法

    この記事では、Python 3.xにおける挿入ソート(Insertion Sort)の基本的な考え方と、実際のコードによる実装方法をわかりやすく解説します。 挿入ソートのアルゴリズム 挿入ソートは、配列を「整列済みの部分」と「未整列の部分」に分け、未整列の要素を一つずつ取り出して、整列済み部分の正しい位置に挿入していくシンプルなソート手法です。処理の手順は以下の通りです。 1. 各反復ごとに整列済みの配列を少しずつ拡大しながら、入力要素を走査する。 2. 現在の要素(キー)を、整列済み配列内の最大値と比較する。 3. キーがその最大値より大きければ、要素はそのままの位置に置かれ、 次の要