【そーとあるごりずむ】

ソートアルゴリズム とは?

最終更新:
💡 同じデータを、決めた基準で整列する手順

データを、数値の大小や名前などの基準に沿って並べ替える手順の総称。方法によって処理時間、追加メモリ、同じキーの順序を保つ性質などが異なる。目的とデータに合う方法や標準機能を選ぶ。

📌 このページのポイント
ソート:データを決めた順番へ並べる前小さい順831642123468ソート同じデータ、並び方を変える1・2・3・4・6・8の6個はそのまま速さ・メモリ・安定性も、方法を選ぶ目安
同じ6個の数値を昇順へ並べる例。特定のソート手順や処理時間は示していません。
ひよこ ひよこ
並べ替えるだけなのに、方法が多いの?
ペンギン先生 ペンギン先生
同じ結果でも、比べ方や移動の手順が違うからだよ。クイックソートは基準の値を使って分割し、マージソートは分けて整列した列を併合する。データ量や元の並び、追加メモリなどで向き不向きが変わるんだ。
ひよこ ひよこ
クイックソートなら、必ず一番速い?
ペンギン先生 ペンギン先生
保証はないよ。NISTの説明では典型的な計算量はO(n log n)だけれど、最悪の場合はO(n²)になる。マージソートはO(n log n)。計算量はデータ数に対する増え方で、実際の秒数や、すべての環境での順位を示すものではないよ。
ひよこ ひよこ
安定ソートって、何が安定なの?
ペンギン先生 ペンギン先生
同じキーのデータが、元の相対的な順番を保つことだよ。点数が同じ生徒を並べたとき、その生徒同士の元の順序が残るイメージ。Pythonのsortedやlist.sortは安定性を保証し、ECMAScriptのArray.prototype.sortにも安定性の要件があるよ。
ひよこ ひよこ
実際の開発でも、自分で書く?
ペンギン先生 ペンギン先生
まず言語の標準機能と、その並べ方の指定を確認するとよいね。Pythonならsortedで新しいリストを作り、list.sortなら元のリストを並べ替える。名前や点数などのキーも指定できる。内部のアルゴリズムや保証は、言語や実装の資料で確かめよう。
ひよこ ひよこ
どんなデータでも、比較して並べるの?
ペンギン先生 ペンギン先生
比較以外の方法もあるよ。カウンティングソートは各キーの出現数を数え、配置を決める。NISTは、データ数に比べてキーの種類が少ない場合に効率的と説明している。値の範囲や必要なメモリを含めて考え、条件なしにO(n)で最速とは言わないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ソートアルゴリズム」って出てきたら「データを順番に並べるための手順」と思えばだいたいOK!
📖 おまけ:英語の意味
「Sort Algorithm」 = 並べ替えの手順
💬 Sortは「分類する・並べる」、Algorithmは「問題を解く手順」のことだよ。

参考資料

← 用語集にもどる