1

嗨我正在研究代码稳定选择排序,我已经能够得到正确的结果,但我不确定代码中是否存在极端情况。我正在排序的数据是这样
的 a[0]=new Data (1,'d');
a[1]=新数据(2,'c');
a[2]=新数据(3,'a');
a[3]=新数据(4,'b');
a[4]=新数据(5,'d');
a[5]=新数据(6,'c');
a[6]=新数据(8,'a');
a[7]=新数据(9,'a');
a[8]=新数据(10,'a');

如您所见,它是按数字排序的,我现在应该按字符对其进行排序。

所以我使用的数据对象的逻辑是这样的:

在寻找最小元素的循环中,我们不仅会找到最小的元素,还会找到具有最小 int 的最小元素。这样元素的顺序将保持不变

即使它工作得很好,这里有没有我错过的极端案例?

例如:让我们拿起iTunes,首先我们按歌曲的ID排序,然后我们想按他们的名字排序。我希望它能让一切都清楚

4

2 回答 2

1

不,你没有错过任何东西。这是使任何不稳定算法稳定的标准技术:强加总排序!任何关系都由第二个键解决 - 这是输入顺序。我假设您在这里正确实施了字典顺序,从您的描述中并不完全清楚。

于 2012-09-02T12:06:59.237 回答
0

您所描述的是对复合键的排序:键的最重要部分是字符,键的最不重要部分是数字。

这不是我所说的稳定排序。对于稳定排序,其中两条记录具有相同的键值,排序序列中的第一个是原始数据中的第一个,但在您的情况下,第一个是编号最小的记录。

对于稳定排序,如果你给它的数据是数字降序排列的,那么如果两条记录有相同的字母,那么排序数据中两条记录中的第一条记录将是数字最大的记录,因为这是输入数据中的第一条记录。使用您的程序,两者中的第一个记录将是编号最小的记录。

于 2012-09-02T12:08:26.717 回答