アルゴリズムの仕組み

大きく分けて「分割」と「統合」の2ステップで動きます。

  1. 分割(Divide): リストを真ん中で半分に分けます。これを要素が1つになるまで繰り返します。

  2. 統合(Merge): 分割された2つのリストを、小さい順に並ぶように合流させます。

  3. 合流したリスト同士をさらに合流させ、最終的に1つの整列済みリストに戻します。

 

特徴と性能

 

マージソートは「安定感」が抜群です。

 
  • 時間計算量: O(n \log n)

    • 最悪の場合でも O(n \log n) です。クイックソートのように極端に遅くなることがありません。

  • 空間計算量: " data-index-in-node="7">ONo

    • 合流の際に一時的に別の配列を用意するため、元の配列と同じ分のメモリを消費します。

  • 安定性: 安定なソート

    • 合流時に左側の要素を優先することで、同じ値の順序を崩さずに済みます。


# マージソート
def
merge_sort(arr):
if len(arr) <= 1: return arr # 1. 分割 mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) # 2. 統合(マージ)して返す return merge(left, right) def merge(left, right): result = [] i = j = 0 # 左右のリストを比較して、小さい方をresultに追加 while i < len(left) and j < len(right): if left[i] < right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 # 残った要素(あれば)を最後に追加 result.extend(left[i:]) result.extend(right[j:]) return result # 使用例 data = [38, 27, 43, 3, 9, 82, 10] print(f"ソート後: {merge_sort(data)}")
Last modified: Friday, April 24, 2026, 1:15 PM