在运行时合并两个排序的数组比O(N)更快

时间:2016-02-09 00:26:16

标签: algorithm sorting merge linked-list time-complexity

我想我有一个解决方案,但我不完全确定。

我的解决方案是将数组转换为链接列表。然后以递归方式合并和排序链表。

我已经读到内存中需要O(1)空间。但我不确定运行时间是否比线性时间快。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

有一种特殊情况,你可以在恒定时间内合并2个数组:

  • 数组是相邻的,即它们是同一数组的切片,第一个数组的最后一个元素就在第二个元素的第一个元素之前。
  • 第一个数组的最后一个元素小于或等于第二个数组的第一个元素。

可以通过一次测试来检查案例。

这可能看起来很荒谬,但对于mergesort来说这是一个非常常见的情况,对这个特殊情况的测试首先会对已经完全或部分排序的数组显着提高mergesort性能。可以使用类似的测试来处理按相反顺序排序的数组,精心设计的代码可以为排序和反向排序的数组实现O(N)排序时间,同时保持一般情况下相同数量的元素比较。 / p>

答案 1 :(得分:0)

  

我的解决方案是将数组转换为链接列表。

这需要O(N)时间和记忆。