您好我正在进行代码稳定选择排序,我已经能够得到正确的结果,但我不确定代码中是否存在极端情况。我正在这样排序的数据
a [0] =新数据(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');
你可以看到它按数字排序,我现在应该按字符排序。
所以我使用的Data对象的逻辑是这样的:
在寻找最小元素的循环中,我们不仅会找到最小元素,而是找到最小元素的最小元素。这样,元素的顺序将保持不变
即使它工作得很好,有没有我在这里错过的角落案件?
对于ex:让我们接受itunes,首先我们按歌曲的id排序,之后我们想按照他们的名字排序。我希望它能让事情变得清晰
答案 0 :(得分:1)
不,你没有错过任何东西。这是使任何不稳定算法稳定的标准技术:强加总排序!任何联系都由第二个键解决 - 这是输入顺序。我假设你在这里正确实现了词典排序,从你的描述中并不完全清楚。
答案 1 :(得分:0)
您所描述的是对复合键的排序:键的最重要部分是字符,键的最不重要部分是数字。
这不是我所谓的稳定排序。使用稳定排序,其中两个记录具有相同的键值,排序序列中的第一个是原始数据中的第一个,但在您的情况下,第一个是具有最小数字的那个。
如果你给它一个稳定排序的数据,如果你给它的数字是降序的,那么如果两个记录有相同的字母,那么排序数据中两个记录的第一个记录将是具有最大数字的记录,因为这是输入数据中的第一条记录。使用您的程序,两者的第一条记录将是编号最小的记录。