408得票29回答
为什么快速排序比归并排序更好?

面试时有人问了我这个问题。它们都是O(nlogn)的,但大多数人使用快速排序而不是归并排序。为什么呢?

297得票10回答
如何使用归并排序算法进行原地排序?

我知道这个问题不是太具体。 我想要的只是有人告诉我如何将普通归并排序转换为原地归并排序(或具有恒定额外空间开销的归并排序)。 我能在网络上找到的所有内容都是“它太复杂了”或“超出了本文的范围”。 已知实现原地合并(不使用任何额外空间)的唯一方法过于复杂,难以减少为实用程序。 (引...

176得票30回答
如何将两个已排序的数组合并成一个已排序的数组?

这是我在面试中被问到的问题,以下是我提供的解决方案:public static int[] merge(int[] a, int[] b) { int[] answer = new int[a.length + b.length]; int i = 0, j = 0, k =...

152得票6回答
为什么Java的Arrays.sort方法针对不同类型使用两种不同的排序算法?

Java 6 的 Arrays.sort 方法会根据数组的类型使用快速排序或归并排序。虽然这两种算法都是 O(n log(n)),但我认为大多数情况下快速排序比归并排序更快且需要更少的内存。我的实验支持了这一点。那么为什么 Java 会为不同类型的数组使用不同的算法呢?

69得票9回答
为什么归并排序的最坏情况运行时间是O(nlogn)?

有人能用简单明了的英语或易于理解的方式向我解释吗?

60得票3回答
为什么在对链表进行排序时,归并排序比快速排序更受青睐

我在论坛上读到以下内容: 归并排序对于像链表这样的不可变数据结构非常有效 而且 当数据存储在内存中时,快速排序通常比归并排序更快。然而,当数据集很大并且存储在外部设备(如硬盘)上时,归并排序在速度方面是明显的赢家。它最小化了昂贵的外部驱动器读取次数 以及 在操作...

56得票20回答
合并排序链表

我最近在复习一些基础知识,发现将链表进行归并排序是一个相当不错的挑战。如果您有良好的实现,请在这里展示出来。

54得票2回答
`std::list<>::sort()` - 为什么突然转向自顶向下的策略?

更新 - Visual Studio 2022 切换到了一种高效的自底向上归并排序的递归实现,并重新使用指针而非迭代器。合并逻辑在可能的情况下改进为一次拼接多个节点。这些变化保留了对于VS2015更改的无内存分配和异常安全修复的原因。 我记得自古以来,实现std::list&lt;&gt...

48得票7回答
合并排序时间和空间复杂度

让我们以这个归并排序的实现为例void mergesort(Item a[], int l, int r) { if (r &lt;= l) return; int m = (r+l)/2; mergesort(a, l, m); ------------(1) mergesort(a, ...

47得票32回答
使用Python实现归并排序

我找不到任何可行的Python 3.3归并排序算法代码,所以我自己写了一个。有没有办法让它更快?它可以在大约0.3-0.5秒内对20,000个数字进行排序。def msort(x): result = [] if len(x) &lt; 2: return x ...