[解決済み] 選択ソートが安定する理由と不安定な理由
質問
私は、以下のことを知っています。
selection sort
は、安定または不安定として実装することができます。しかし、それはどのように実現されるのでしょうか。ソートアルゴリズムは安定か不安定しか選べないと思うのですが。誰か説明してください。
どのように解決するのですか?
基本的に
selection sort
このため、各ラウンドの最後に発生するスワップによって、同じ値を持つアイテムの相対的な順序を変更することができます。
例えば、次のようにソートしたとします。
4 2 3 4 1
で
selection sort
.
最初のquot;round"は、各要素を通過して最小の要素を探します。そして、1が最小の要素であることを発見します。
1 2 3 4 4
元のリストの最初の 4 は、他の 4 の後のスポットに移動しました。
安定した状態とは、次のようなものであることを思い出してください。
同じ値を持つ要素の相対的な順序が維持されること。
さて。
selection sort
で動作します。
一連の値の中から「最小」の値を見つけ、それを最初の値と入れ替える。
:
コード
2, 3, 1, 1 # 0からnまでスキャンして「最小」の値を探す
1, 3, 2, 1 # '最小'と要素0を入れ替える.
1, 3, 2, 1 # 1からnまでスキャンして、「最小」の値を見つける。
1, 1, 2, 3 # '最小'と要素1を入れ替える。
...といった具合に、並べ替えが完了するまで続けます。
これを安定させるために、値を入れ替える代わりに、「最小」の値を挿入します。 :
コード
2, 3, 1, 1 # 0からnまでスキャンして「最小」の値を探す
1, 2, 3, 1 # pos 0 に「最低」を挿入し、他の要素を後ろに押しやる。
1, 3, 2, 1 # 1からnまでスキャンし、「最小」の値を見つける。
1, 1, 2, 3 # pos 1 に '最小' を挿入し、他の要素を後ろに押しやる。
...といった具合に、並べ替えが完了するまで続けます。
不安定な選択ソートアルゴリズムを安定になるように修正するのは、それほど難しいことではないはずです。
関連
-
[解決済み] Verilogで1次元と2次元のバイト配列を宣言して使用するには?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 整数の配列を正しくソートする方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MIPSで配列を作る(アクセスする)方法
-
[解決済み] Swift Closuresの$0と$1の意味は何ですか?
-
[解決済み] MATLABで動的配列を作成する方法
-
[解決済み] Rで3D行列をセットアップし、特定の要素にアクセスする
-
[解決済み] Scala:Arrayに要素を追加する最良の方法は何ですか?
-
[解決済み] int (*p)[10]=s と int (*o)[5]=&s の違いは何ですか?
-
[解決済み] MASMアセンブリの配列 (非常に混乱している初級者)
-
[解決済み] 配列をヒープ化するためのヒープにおけるsiftUp, siftDown操作
-
[解決済み] MATLABのnumel関数とlength関数の違いについて
-
[解決済み] Twigでの出力配列