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(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)O(n)O(n)✓✗
クイックソートO(n2)O(n^2)O(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)O(log⁡n)O(\log n)✗✓
ヒープソートO(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)O(nlog⁡n)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 や乱択ピボット)

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

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