在Java中,原始类型的Arrays.sort()使用快速排序。另一方面,对象的Arrays.sort()使用合并排序。而且,同样使用Merge排序的Collection.sort()也是如此。集合排序使用下面的数组排序实现。因此,从简单的意义上讲,我可以说基元是使用快速排序来排序的,而对象是使用合并排序来排序的。
我的猜测是它与自身的排序算法有关。上有快速的SO如此多的讨论排序VS归并排序,像这样和这个。似乎有相互矛盾的主张,哪一种更好,这是可以理解的,因为这取决于数据集。
我的理解是
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中对对象进行排序的良好候选者?为什么不将这个决定留给开发人员呢?
我正在维基百科上阅读关于外部排序的文章,我需要理解为什么两阶段合并比一阶段合并更有效。 Wiki:但是,单次合并有一个限制。随着区块数量的增加,我们将内存分成更多的缓冲区,因此每个缓冲区都较小,因此我们必须进行许多较小的读取,而不是较少的较大读取。 因此,对于100 MB内存中的50 GB的排序,使用单个合并过程是没有效率的:磁盘需要用500个数据块中的每个数据块(我们一次从每个数据块读取100M
问题内容: 我们知道快速排序是最快的排序算法。 JDK6 使用合并排序算法而不是快速排序。但是Arrays.sort使用快速排序算法。 Collections.sort使用合并排序而不是快速排序的原因是什么? 问题答案: 极有可能从乔希布洛赫§: 我确实写了这些方法,所以我想我有资格回答。确实没有最佳的排序算法。与mergesort相比,QuickSort有两个主要缺陷: 它不稳定(如parsif
我从这里得到了帮助,但我特别不想宣布我的方法无效。任何帮助都将不胜感激! 这是我的合并排序的实现,我得到的输出是5 4 3 2 1 10 9 8 7 6。 有人能帮我弄清楚我该怎么做吗? 我不想将mergesort和merge方法声明为void,而是希望它们返回排序后的数组。提前谢谢。
问题:Mergesort将一个数字列表分成两半,并对这两个数字进行递归调用。相反,您能在左半部分执行quicksort,在右半部分执行mergesort吗?如果是,则通过显示每个步骤来显示它将如何对下面的数字列表进行排序。如果没有,请解释为什么不能。 Iam应该使用MergeSort对数字列表进行排序。左半部分将使用快速排序进行排序? 我想出来了。安:是的,我们可以 使用mergeSort对数组的
我读过这些话: 为了使动态规划适用,一个问题必须具有两个关键属性:最优子结构和重叠子问题。如果一个问题可以通过组合非重叠子问题的最优解来解决,那么这个策略就叫做“分而治之”。这也是为什么mergesort和quicksort没有被归类为动态规划问题的原因。 我有三个问题: 为什么合并排序和快速排序不是动态编程? 我认为合并排序也可以将小问题和小问题分开,然后做同样的事情等等。 Dijkstra算法
我第一次用一个辅助数组实现了合并排序,以尝试使用JavaScript实现可视化。这似乎应该是有效的,但它不是。任何帮助或提示将不胜感激。 编辑:我忘了包括它不起作用的情况。它们是: 输入:[4, 2, 5, 6, 7, 7]输出:[4, 2, 5, 6, 7, 7] 输入:[6,6,6,4,6,2]输出:[4,6,6,6,6,2] 输入:[6, 7, 3, 10, 7, 9, 6, 3, 4, 6