2012-09-02 140 views
1

您好我正在代码稳定选择排序,我已经能够得到正确的结果,但我不知道是否有代码中的角落案件。我正在排序的数据这样
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');可以选择稳定吗?

你可以看到它是按数字排序的,我现在应该按字符排序。

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

找到的最小元素的循环

,我们不会随便找最小的元素,但与最小的INT最小元素。这样顺序的元素将保持不变

即使它工作得很好,有没有我错过了这里的任何角落案例?例如:让我们先看看iTunes吧,首先我们按照歌曲的ID排序,然后我们要按他们的名字排序。我希望它能让每件事情都清楚

+0

你能改说这个问题吗?我不能告诉你在问什么。另外:跳过[9]和复制[0]只是一个错字? - 当你试图在代码中获得帮助时,你需要得到这些东西的准确性;-) – John3136

回答

1

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

+0

我认为我们不同意,因为我们用两种不同的方式解释了输入数据。如果这些数字完全属于排序程序的内部 - 由它产生并且外界从未见过 - 那么我同意你的看法,这是一个稳定的排序。如果程序收到这些数字作为输入数据的一部分,并且正在利用它们恰好按升序排列的事实,那么我认为这不是一个稳定的排序。 – mcdowella

+0

数字的生成方式无关紧要。我想OP会手动生成它们 - 但只要它们被排序,输出将会保持稳定。无论如何,从实际的角度来看,整个问题都是无稽之谈。 OP可以使用插入排序或合并排序来稳定排序。 – ltjax

+0

我了解合并排序。重点是稳定排序,因为这是非稳定的,所以我试图实现稳定的排序和问题,我脑子里想到的是iTunes的问题。 – Dude

0

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

这不是我所说的稳定排序。通过稳定的排序,在两个记录具有相同的键值的情况下,排序序列中的第一个记录是原始数据中的第一个,但在您的情况下,第一个记录是具有最小数字的那个记录。

对于稳定的排序,如果您给出了其中数字以降序排列的数据,那么如果两个记录具有相同的字母,则排序数据中的两个记录中的第一个记录将是具有最大数字的记录,因为这是输入数据中的第一条记录。通过你的程序,两者中的第一条记录就是最小号的记录。

+0

如果数字最初被排序(并且问题说明它们是),那么排序将是稳定的。 – interjay

+0

看到我的评论给你的答案。在现实生活中,我想我会呼吁规范,看看程序可以假设它的输入数据。基于我们在这里所知道的很少,因为你可以在不依赖输入数据的特殊特征的情况下获得稳定的排序,所以我认为只有当输入数据遵守特定限制时才产生稳定排序的程序并不是一个稳定的程序排序数据。 – mcdowella