7得票3回答
使用时间复杂度为O(n + k*log(k))的算法对整数进行排序

设计一种算法,对包含重复元素的n个整数进行排序,其中不同数字的总数为k。你的算法应该在O(n + k*log(k))的时间复杂度内运行。期望的运行时间足够快。对于哪些值的k,这个算法变成线性? 我无法想出一个符合条件必须是O(n + k*log(k))的整数排序算法。我不是一个很高级的程序员...

11得票3回答
为什么MergeSort中的偶奇分割可以使排序更快?

MergeSort是一种分治算法,将输入分成几部分并递归地解决这些部分。有几种方法可以进行拆分函数的实现,一种方法是将数组从中间拆分,这种方法具有一些不错的特性,但我们将关注一种更快的方法:奇偶拆分。其想法是将每个偶数位置的元素放在一个列表中,将每个奇数位置的元素放在另一个列表中。 这段话来...

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

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

15得票1回答
对于输入大小为n,哪些n值下插入排序会胜过归并排序?

在《算法导论》(Corman)一书中,练习1.2-2提出了关于比较插入排序和归并排序实现的问题。对于输入大小为n,插入排序运行了8n^2次步骤,而归并排序运行了64n lg n次步骤; 对于哪些n值,插入排序能够击败归并排序? 虽然我对答案很感兴趣,但我更想知道如何逐步找到答案(以便我可以重...

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

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

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

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

11得票5回答
C++中合并多个已排序序列为一个已排序序列的算法

我需要一个算法来将多个已排序的序列合并成一个已排序的序列,假设有X个已排序的序列,每个序列中有n个元素,使用C++编程语言,你能提供一些例子吗? 注意:我不想使用任何库。

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

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

8得票2回答
外部归并排序的时间复杂度/成本

我从这个链接中得到了以下内容,它讲述了外部归并排序。 示例:使用5个缓冲页对108页文件进行排序 Pass0: [108/5] = 22个每个包含5页的已排序运行(最后一个运行仅包含3页) Pass1 [22/4] = 6个每个包含20页的已排序运行(最后一个运行仅包含8页) Pass2...

7得票4回答
排序算法中的递归 - 总是不好的吗?

Mergesort(归并排序)、quicksort(快速排序)可能是最著名的nlogn排序算法。它们的解释和C++代码示例在大多数情况下包含递归。但就我对递归的了解,当数据量很大时,我们会遇到堆栈溢出的风险。因此,在实际生活中使用时,是否合理忽略关于排序算法的递归解释呢?