ソートアルゴリズムが「安定」しているとはどういう意味ですか?


43

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


32
この質問はウィキペディアで簡単に答えられます。en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus 14

5
@MareInfinitusより正確には:en.wikipedia.org/wiki/Sorting_algorithm#Stability
BЈовић

4
これは、独自の研究に欠けている質問です。ウィキペディアの写真で答えました。そして、それは本当に良いフィードバックを得て、どういうわけか私を悲しませます。私見、それは閉じて、賛成票を得るべきではありません。
マーレInfinitus 14

4
一方、私はこれを見て、新しいことを学びました。私はこれを知らなかったと知っていたなら、それを研究することができましたが、OPが質問をしたので、私は今、私が知らなかったことを知りませんでした。
カザール14

4
一般的に、「Googleで検索」または「ウィキペディアで検索」は、StackExchangeサイトではあまり受け入れられない回答です。なぜなら彼らは、グーグルとウィキペディアの当局への呼び出しで、苦情者が有効な質問として検証しているものに対する答えを提供しないからです。質問が、programmers.stackexchange内の別の1つまたは複数の質問と簡単に重複している場合は、苦情を申し立てることができます。
マイケルポールコニス

回答:


88

安定したソートは、入力セットのオリジナルの順序維持一つである比較アルゴリズムは、2つの以上の項目を区別しません。

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

ここに画像の説明を入力してください


38
修正:2つの要素が等しい場合、不安定なアルゴリズムは未定義の動作を示します。順序が保持されることは完全にあり得ます。
aaaaaaaaaaaa 14


9
@MareInfinitus:パブリックドメインです。元の画像の属性を確認してください。
ロバートハーベイ14

2
良い写真は、平均的な場合の多くの単語よりも速く、深く説明しています。法的問題は、私が話したいことではありませんでした。
マーレインフィニタス14

3
@RobertHarvey実際、編集者は正しいと思います。現在の投稿では、安定した並べ替えでは同じスーツのカードの順序が保持されるが、同じスーツのカードのランクは異なるため、並べ替えの順序を実現するには再配置する必要があると述べています。たとえば、ソートでは、ハートの2と5の順序は保持されません。安定と不安定を区別するのは、同じランク(および異なるスーツ)のカードの順序です。
デビッドZ 14

26

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

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

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で値を並べ替えるために列ヘッダーをクリックすると、値が等しい場合に以前の並べ替え順序が使用されることを期待するのが妥当です。


2
しかし、それはそれほど効率的ではありませんか?「明らか」に見えますが、いくつかの最良のソートアルゴリズムは本質的に安定しています(たとえば、Timソートなどのマージソートに基づくもの)。

9
安定版は一般にパフォーマンスとは関係ありません。MergesortはO(n * log n)で実行され、安定しています。Heapsortのパフォーマンスは似ていますが、安定していません。
マーレインフィニタス14

2
「安定」は、データ構造にも適用できます。「安定したヒープ」は、キューに入れられたのと同じ順序で同じ優先度を持つアイテムをデキューするヒープです。これは、効率的なパス検索アルゴリズムにとって非常に重要です。
BlueRaja-ダニーPflughoeft 14

1
O(n ln n)比較であり、メモリー上のO(1)でもある安定したソートはありません。速度だけが効率の尺度ではありません。インプレースで安定したソートができないという事実は重要です。
質問

3
@QuestionC ブロックソートは安定しており、それらの境界に適合しているようです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.