アルゴリズムの仕組み

考え方は非常にシンプルで、**「まだ並び替えていない部分から一番小さいものを探し、左に詰めていく」**という流れです。

  1. リスト全体の中から、最小値を探します。

  2. 見つかった最小値と、未整列部分の先頭の要素を入れ替えます。

  3. 「最小値が確定した部分」を一つ右へ進め、残りの部分で再び最小値を探します。

  4. これを未整列の要素がなくなるまで繰り返します。

 

特徴と性能

バブルソートと同様に、仕組みは簡単ですが、データの量が増えると時間がかかるタイプです。

  • 時間計算量: O(n^2)

    • どんなデータ状態(既に整列されていても、逆順でも)であっても、必ず最後まで比較を行うため、常にこの時間がかかります。

  • 空間計算量: O(1)

  • 安定性: 不安定なソート

    • 離れた場所にある要素同士を入れ替えるため、同じ値の要素の前後関係が崩れる可能性があります。

# 選択ソートのコード

def selection_sort(arr):
    n = len(arr)
    for i in rangeNo:
        # 未整列部分の先頭を暫定の最小値とする
        min_idx = i
        # 残りの要素から最小値を探す
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        
        # 見つかった最小値を先頭(i番目)と入れ替える
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

# 使用例
data = [29, 10, 14, 37, 13]
sorted_data = selection_sort(data)
print(f"ソート後: {sorted_data}")

最終更新日時: 2026年 04月 24日(金曜日) 13:14