Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ソートアルゴリズム

ソートアルゴリズムはデータを特定の順序に並び替えるアルゴリズム。用途やデータの特性によって最適な手法が異なる。

主要アルゴリズムの比較

アルゴリズム最悪平均最良空間安定in-place
バブルソートO(n2)O(n^2)O(n2)O(n^2)O(n)O(n)O(1)O(1)
選択ソートO(n2)O(n^2)O(n2)O(n^2)O(n2)O(n^2)O(1)O(1)
挿入ソートO(n2)O(n^2)O(n2)O(n^2)O(n)O(n)O(1)O(1)
マージソートO(nlogn)O(n\log n)O(nlogn)O(n\log n)O(nlogn)O(n\log n)O(n)O(n)
クイックソートO(n2)O(n^2)O(nlogn)O(n\log n)O(nlogn)O(n\log n)O(logn)O(\log n)
ヒープソートO(nlogn)O(n\log n)O(nlogn)O(n\log n)O(nlogn)O(n\log n)O(1)O(1)
計数ソートO(n+k)O(n+k)O(n+k)O(n+k)O(n+k)O(n+k)O(n+k)O(n+k)
基数ソートO(d(n+b))O(d(n+b))O(d(n+b))O(d(n+b))O(d(n+b))O(d(n+b))O(n+b)O(n+b)

選択の指針

  • 汎用: Python の sorted() / list.sort()(Timsort)を使う

  • 小配列 / ほぼソート済み: 挿入ソート

  • 最悪保証が必要 + in-place: ヒープソート

  • 安定 + 最悪保証: マージソート

  • 実用最速(平均): クイックソート(median-of-3 や乱択ピボット)

  • 整数 + 値域が小さい: 計数ソート

  • 整数 + 値域が広い: 基数ソート