スワッピングの代わりに、選択ソートを挿入して安定したソートに変更することができます。私は同じオンラインの次の実装を得ました。選択ソート - 安定
私は、これは以下のために安定したソートされますどのように理解しない void selection (int a[], int n)
{
while (--n > 0) {
int i, max = n;
for (i = 0; i < n; i++) {
if (a[i] >= a[max])
max = i;
}
if (max != n) {
int save = a[max];
for (i = max; i < n; i++)
a[i] = a[i + 1];
a[n] = save;
}
}
}
:5,1(、 (1,0)、(2,0)、(5,0)、(4,0)私は上記の実装では、私が見るいけない、(2,0)、(4,0)、(5,1)、(5,0)
を (1,0)を与える言及したと思います)
これは私が理解するように安定した行動として。私は正しいですか?もしそうなら、どうすれば安定した選択ソートを実装できますか?
次のコードを変更すると、安定した選択ソートができます。私が間違っているなら、私を訂正してください。
for (i = 0; i < n; i++) {
if (a[i] >= a[max])
max = i;
}
この行は私が思っている望ましい結果を与えません。この場合、ソートのために与えたデータには安定した結果が得られません。私は次のコードはうまくいくと思います。
for (i = 0; i <= n; i++) {
if (a[i] >= a[max])
max = i;
}
私が間違っていれば私を訂正しますか?
ありがとうございました
お返事ありがとうございます。 (a [i]> = a [max]) max = i; for(i = 0; i = a [max]) max = i; for(i = 0; i <= n; i ++){ } 私が間違っている場合は私を訂正しますか? ありがとう –
trialyogi
@trialyogi:はい、そうです。 'for(i = 0; i <= n; i ++)'でなければならないので、すべての要素を見て、ソートは安定します。 – interjay