两个排序的数组,执行交换,使第一个中的每个元素都小于第二个中的任何元素

时间:2014-06-11 10:35:35

标签: algorithm

我需要创建一个算法来解决以下问题:

给定两个排序的数组(都有n元素)我需要修改它们,以便第一个数组中的每个元素都小于第二个数组中的任何元素。我可以做的操作是比较两个元素并交换两个元素。

我的第一个解决方案就是:

设a是第一个数组的最后一个元素,让b为第二个数组的第一个元素。如果a<b然后我们停止,否则我们交换它们并继续更小的数组n-1(擦除第一个中的最后一个元素,第二个中的第一个元素)。

这显然是线性的。

但是,如果我想最小化此算法中的比较次数呢?在这一个中,我进行了线性数量的交换和比较。我可以通过比较来缩小规模吗?

我认为我可以进行双二进制搜索。意思是我搜索这样的元素a&#39;在第一个数组中,然后是一些元素b&#39;在第二个阵列中,但小于他旁边的那个。这具有复杂性O(lg n^2)。我能做得更好吗?

1 个答案:

答案 0 :(得分:1)

您的算法无法使用O(lg n^2)

使用二进制搜索,您将减少从O(n)到log(n)的比较次数,但交换操作的次数仍为O(n)

是的,您的算法会略有改进,但复杂性保持不变。您必须执行k

的交换次数0<=k<=n