处理一组复合数据类型时,排序算法是否显示出更多的不稳定度?

时间:2018-08-04 10:45:51

标签: algorithm sorting data-structures

还是稳定性与处理原始数据类型数组时的稳定性相同?

3 个答案:

答案 0 :(得分:1)

按原始值的实际完整值对原始值数组进行排序时,稳定性的概念并不重要。

如果您有一个数组 [2,1,3,2] 并对其进行排序,则将得到 [1,2,2,3] 。无论使用稳定排序还是不稳定排序,结果都是完全相同的。

当您不按完整值排序时,即比较相等的项实际上不同时,然后的稳定性就变得重要了。例如,如果按整数之和对整数数组进行排序,则 [11,5,13,​​22] 将成为 [11,13,22,5] 具有稳定的排序,但不稳定的 可能会给您 [11,22,13,5]

答案 1 :(得分:0)

排序归结为比较两个项目。因此,只要这些项目具有可比性,并且结果会导致“更少”,“鸡蛋”,“更大”,那么排序算法就可以正常工作。

例如在Java中,您的类可以实现Comparable接口的compareTo()方法,例如, Collections.sort()。

为使排序稳定,在进行比较时,您需要考虑项目的所有字段。

答案 2 :(得分:0)

关于问题的稳定性和对原语与对象进行排序的可能性,那么在某些编译器语言的情况下,对原语使用快速排序的变体,但不稳定,而使用合并排序的变体在稳定的物体上。这是因为如果对基元进行排序,稳定性通常不是问题。

一种检测原始整数类型稳定性的方法是将整数的一部分用作原始序列值,并使用仅比较另一部分的自定义比较。也许对于32位整数,高16位填充随机数据并用于比较,低16位用作原始序列指示符。