gpt4 book ai didi

c - 选择排序——稳定

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:25 25 4
gpt4 key购买 nike

我读到,我们可以插入以将选择排序更改为稳定排序,而不是交换。我在网上得到了以下相同的实现。

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;
}

如果我错了,请纠正我?

谢谢

最佳答案

您发布的代码似乎是一种稳定的排序。

在选择循环中,将始终选择最大值的最后 次出现。这是因为条件说的是 a[i] >= a[max] 而不是 a[i] > a[max]

for ( i = 0; i < n; i++ ) {
if ( a[i] >= a[max] )
max = i;
}

然后将选中的元素放在末尾(稳定排序应该放的地方)。其余元素的顺序没有改变,因为它们都是移动的而不是交换的。这保证了具有相同值的元素将保持相同的顺序,即稳定排序。

关于c - 选择排序——稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com