1
我讀到,而不是交換,我們可以插入更改選擇排序到穩定的排序。我在網上獲得了以下實現。選擇排序 - 穩定
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;
}
}
}
我不明白這是如何將是下一個穩定的排序: (1,0),(2,0),(5,0),(4,0),(5,1 )
我認爲上述的實施將給 (1,0),(2,0),(4,0),(5,1),(5,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;
}
如果我錯了,糾正我?
謝謝
感謝您的回覆。對於(i = 0; i = a [max]) max = i; } 該行不會給我們想要的結果,我認爲,在這種情況下,它不會給我的數據排序的穩定結果。我認爲下面的代碼會很好。 (i = 0; i <= n; i ++){ if(a [i]> = a [max]) max = i; } 糾正我,如果我錯了? 謝謝 –
trialyogi
@trialyogi:是的,你說得對。它應該是'for(i = 0; i <= n; i ++)',以便它查看所有元素,然後排序將會穩定。 – interjay