为什么Merge sort用于Android / Java API中的对象?

前端之家收集整理的这篇文章主要介绍了为什么Merge sort用于Android / Java API中的对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Java Arrays.sort()中,基本类型使用快速排序.另一方面,Arrays.sort()对象使用合并排序.同样适用于Collection.sort(),它也使用Merge排序.集合排序使用下面的Arrays排序实现.所以,简单来说,我可以说基元是使用快速排序排序的,但是对象是使用合并排序进行排序的.

我的猜测是它与自己的排序算法有关.关于快速排序与合并排序的SO有很多讨论,比如thisthis.似乎存在相互矛盾的声明哪个更好,这是可以理解的,因为这取决于数据集.

我的理解是

>到位:快速排序获胜.可以在链接列表的就地实现合并排序
>外部存储数据:合并排序获胜.
>排序列表(由任何形式的链表支持):合并排序获胜. Link

Android API似乎遵循与Java相同的模式.这就是我在Arrays.java中找到的

    public static void sort(long[] array) {
    DualPivotQuicksort.sort(array);
}

还有这个,

public static void sort(Object[] array) {
    ComparableTimSort.sort(array);
}

我不明白的是,是什么让Merge排序成为在Java或Android中排序对象的好选择?为什么不把这个决定留给开发者?

最佳答案
关键问题是排序稳定性 – 如果从排序顺序的角度看两个元素相等,它们是否以与输入中相同的顺序出现在结果中.

对于例如长.输入中的所有3个实例将组合在一起,没有人关心哪个是哪个.

另一方面,对象可能以不影响排序顺序的方式不同.如果您按腿数分类动物,您可能会关心“猫”和“狗”是否保持原始顺序.

Arrays.sort合并是稳定的.用于基元的快速排序不需要稳定.

原文链接:https://www.f2er.com/android/430314.html

猜你在找的Android相关文章