合并排序数组和未排序数组

时间:2018-09-21 00:18:42

标签: algorithm sorting

将已排序的数组与未排序的数组合并,以得到最终的已排序数组。更好的方法,不是显而易见的方法。

final_sorted_array=merge(sort(unsorted_array), sorted_array)

我假设 merge 步骤类似于 merge sort

,我们知道最好的情况通常受到O(n log n)的限制。我试图了解有序数据(了解有关数据的信息)在总体上如何有用。

1 个答案:

答案 0 :(得分:0)

假设您的第一个数组称为n1元素的A1,而第二个数组称为n2元素的A2:

O(n2 + c)为代价来扩展A1的长度并将A2附加到其后,其中c是一个常数。应用快速排序并以O( (n1+n2)*log(n1+n2) )的其他费用进行订购。您提到您不希望采用明显的方式,但是,您希望以最佳方式完成工作。这可能是最好的方法,因为它使您仍然可以使用常规数组,这些常规数组通常是通常最快的数据结构(当然,它具体取决于您正在执行的任务)。

但是,另一种可能性是使A1成为常规数组的链接列表的插入物,出于此分析的目的,我们将不考虑将A1从常规数组转换为链接列表的成本。因此,方法是将A2的每个元素插入A1。插入排序的一种明显方法是验证A1的每个元素,然后确定插入位置,每次插入的代价为O(n1 + c)。但是,一种更聪明的方法是对A1进行二进制搜索,以确定A2的每个元素应插入的位置,每次插入的代价为O(log(n1) + c)。在这种情况下,将插入n2,即总费用n2*O(log(n1) + c)。在这种方法中,您不需要移动任何A1元素,因为我们假设您使用的是链表,因此您只需要检查这些元素即可。这就是为什么此渐近函数看起来更好的原因,此数据结构使您能够仅查看A1原始元素而无需实际移动它们。

要决定应该使用哪种方法,我建议您分析阵列合并后出现的算法,选择最适合您需求的选项。