7得票2回答
使用数组的归并排序的空间复杂度

这个算法是归并排序,我知道这可能看起来很奇怪,但我的重点是计算该算法的空间复杂度。 如果我们查看归并排序函数的递归树并尝试跟踪算法,则堆栈大小将为log(n)。但由于mergesort中还有merge函数,该函数创建两个大小为n/2,n/2的数组,因此首先应该找到递归关系的空间复杂度,然后再...

7得票1回答
这个归并排序的实现好吗?

我昨晚刚开始学习Haskell,之前从未使用过函数式编程语言。 我只是想知道我的归并排序实现是否好或不好,以及到底什么是好的或不好的。 也许它甚至是错误的 - 它确实可以排序,但也许算法不是我认为的归并排序。 请告诉我我能在这里改进的一切。我自己认为这是一个相当清晰简单的实现。 感谢您的建议...

7得票2回答
什么是用于排序单向链表的最佳原地排序算法?

我一直在研究用原地排序算法对链表进行排序。根据维基百科的描述,归并排序通常是排序单向链表的最佳选择:在这种情况下,相对容易以一种只需要Θ(1)额外空间的方式实现归并排序。由于链表的缓慢随机访问性能使得某些其他算法(例如快速排序)表现不佳,而其他算法(例如堆排序)则完全不可行。 据我所知,归并...

7得票2回答
Arrays.sort(Object[] a) - 它是如何实现的?

有没有关于Arrays.sort(Object[] a)中使用的mergeSort算法实现的资源?虽然这个算法已经有很好的文档说明,但我仍然很难理解它(尤其是为什么在递归调用mergeSort()时src和dest会被交换)。

7得票1回答
2路归并排序和归并排序

两路归并排序与递归合并排序有何不同? 假设要排序5个数字:8、9、1、6、4。在合并排序中,我们按以下方式进行划分: 步骤1:{8,9,1}{6,4} 步骤2:{8,9}{1}{6}{4} 步骤3:{8}{9}{1}{6}{4} 现在合并 步骤4:{8,9}{1}{4,6} ...

7得票4回答
如何迭代地编写归并排序?

我已经编写了一个递归版本的归并排序算法。它使用了一个单独的merge程序: def merge(lst1, lst2): i = j = 0 merged = [] while i < len(lst1) and j < len(lst2): ...

7得票1回答
Timsort在降序数据上表现如何?

来自于: http://svn.python.org/projects/python/trunk/Objects/listsort.txt 和: http://en.wikipedia.org/wiki/Timsort 我看到Timsort在a0>a1>a2>.....

7得票1回答
快速排序如何比归并排序更擅长于缓存局部性?

在涉及到快速排序与归并排序的答案中, 通常会说快速排序比归并排序更好地利用了缓存局部性(引用局部性)。 由于两种排序都采用了分治方法,我不明白为什么快速排序更加友好。有人能提供更多相关见解吗? 此外,还有关于原地归并排序的注释。如果这是可行的(我不知道是否可行),那么归并排序也可以成为缓存...

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

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

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

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