45得票5回答
外部归并排序算法是如何工作的?

我正在尝试理解外部合并排序算法的工作原理(我看到了一些相同问题的答案,但没有找到我需要的)。我正在阅读Jeffrey McConnell的《算法分析》一书,并尝试实现其中描述的算法。 例如,我有输入数据:3,5,1,2,4,6,9,8,7,而我只能将其中4个数字加载到内存中。 我的第一步是...

38得票8回答
非递归归并排序

有人能用英语解释非递归归并排序是如何工作的吗? 谢谢

37得票6回答
何时使用归并排序而不是快速排序?

在许多情况下,快速排序比归并排序更好。但是,在什么情况下归并排序可能比快速排序更好呢? 例如,当所有数据无法一次性加载到内存中时,归并排序的效果更好。还有其他情况吗? 建议重复问题的答案列出了使用快速排序优于归并排序的优点。我正在询问可能的情况和应用程序,其中归并排序比快速排序更好。

26得票1回答
在使用 C++ 的归并排序中合并时出现随机值

我需要完成一个小作业,写一个简单的合并函数,其原型如下: void merge(int a[], int left_low, int left_high, int right_low, int right_high) 为了简化,我们只考虑一个数组 a[],并且 right_low = ...

26得票9回答
多线程快速排序或归并排序

如何在Java中实现并发的快速排序或归并排序算法?我们在一台拥有16个(虚拟)内核的Mac上遇到了问题,使用默认的Java排序算法只有一个内核在工作!看到这部非常好的机器完全未被充分利用真是令人不爽。所以我们自己写了一个(我写的),确实获得了很好的加速效果(我编写了一个多线程快速排序,由于其分...

25得票8回答
对于初学者的归并排序解释

我在网上找到了这段代码:def merge(left, right): result = [] i ,j = 0, 0 while i < len(left) and j < len(right): if left[i] <= righ...

24得票9回答
理解归并排序的递归

我看到的大多数归并排序实现都类似于这个,它们来自《算法导论》这本书以及我搜索到的在线实现。我的递归技巧不过是玩弄斐波那契生成(这已经足够简单了),所以也许是多重递归让我感到困惑,但是即使在进入合并函数之前,我甚至无法通过代码理解正在发生什么。 如何才能理解这个过程?是否有一些策略或阅读材料可...

22得票3回答
为什么Java 6中的Arrays#sort(Object[])会针对小数组从归并排序改为插入排序?

Arrays.java中Java 6的mergesort实现在数组长度小于某个阈值时使用插入排序,该值硬编码为7。由于算法是递归的,对于大数组,这最终会发生多次。经典的归并排序算法没有这样做,只使用归并排序一直到列表中只剩下1个元素。 这是一种优化吗?如果是,它应该如何帮助?为什么是7? 即...

21得票15回答
快速排序比归并排序慢吗?

昨天我在实现快速排序算法,然后我运行它,期望它比归并排序(我也实现了)有更快的运行时间。我运行了这两种算法,虽然快速排序在小数据集<100个元素时更快(我确保它是可行的),但归并排序很快就成为了更快的算法。我被教导快速排序几乎总是比归并排序“更快”,我知道这个话题存在一些争议,但我至少预...

19得票4回答
Haskell中的归并排序

我是Haskell的新手,正在尝试在其中实现一些已知的算法。 我已经对字符串进行了归并排序。与C和Java实现相比,我的Haskell实现表现有些令人失望。 在我的机器上(Ubuntu Linux,1.8 GHz),C(gcc 4.3.3)在1.85秒内对1,000,000个字符串进行排序,...