web-dev-qa-db-ja.com

並べ替えアルゴリズムが「安定」しているとはどういう意味ですか?

さまざまな並べ替えアルゴリズムについて読んだときに、「安定」しているものとそうでないものがあると述べました。それはどういう意味ですか、そしてアルゴリズムを選択するときにそれに基づいてどのトレードオフが関係していますか?

44
Daenyth

安定した並べ替えとは、入力セットの元の順序を保持する並べ替えで、比較アルゴリズムは2つ以上のアイテムを区別しません

カードをrankでソートするが、スートではないソートアルゴリズムを検討してください。安定したソートは、同じランクを持つカードの元の順序が保持されることを保証します。不安定なソートはしません。

enter image description here

90
Robert Harvey

安定したアルゴリズムは、要素の相対的な順序を保持します。

したがって、安定したソートアルゴリズムは、等しいと比較される値の相対的な順序を保持します。

X次元に基づいて2Dポイントのコレクションを並べ替える並べ替えアルゴリズムについて考えます。

ソートするコレクション:{(6, 3), (5, 5), (6, 1), (1, 3)}

安定したソート:{(1, 3), (5, 5), (6, 3), (6, 1)}

通常の並べ替え:{(1, 3), (5, 5), (6, 3), (6, 1)}または{(1, 3), (5, 5), (6, 1), (6, 3)}のいずれか


トレードオフについては...まあ、安定したソートは効率が悪いですが、時にはそれが必要です。

たとえば、ユーザーが列ヘッダーをクリックしてUIで値を並べ替える場合、値が等しい場合は以前の並べ替え順序が使用されると想定するのが妥当です。

26
QuestionC