从未排序的数字列表中插入数字到排序的数字列表

时间:2016-01-07 01:46:39

标签: algorithm sorting

我有一个列表A,其元素从最小到最大排序。例如:

  

A = 1,5,9,11,14,20,46,99

我想在A中插入未排序的数字列表的元素,同时保持A排序。例如:

  

B = 0,77,88,10,4

将按如下方式插入A中:

  

A = 0,1,4,5,9,10,14,20,46,77,88,99

这个问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:3)

根据最佳定义,最佳可能性太主观。从big-O的角度来看,如果数组A的长度为n1,数组B的长度为n2,则可以在max(n2 * log(n2), n1 + n2)中实现。

这可以通过在O(n log n)中排序数组B,然后在O(n + m)

中排序merging two sorted arrays来实现

答案 1 :(得分:1)

最佳解决方案取决于您如何定义最佳解决方案。

即使时间复杂,它仍然取决于您输入的A和B大小。假设输入大小A是m,B的输入大小是n。

正如萨尔瓦多所提到的,在O(nlogn)中排序B并在O(m + n)中与A合并是一个很好的解决方案。请注意,如果采用基于非比较的排序算法(如计数排序,基数排序等),则可以在O(n)中对B进行排序。

我在这里提供另一种解决方案:循环B中的每个元素并在A中进行二进制搜索以找到插入位置然后插入。时间复杂度为O(nlog(m + n))。

编辑1:正如@moreON指出的那样,二进制搜索然后插入方法假设您列出了实现支持,至少是为了插入和随机访问而分摊的O(1)。还发现时间复杂度应该是O(nlog(m + n))而不是O(nlogm),因为二进制搜索在添加更多元素时花费的时间更多。

相关问题