给出两个数组
a[] = {1,3,2,4}
b[] = {4,2,3,1}
两者将具有相同的数字,但顺序不同。 我们必须对两者进行排序。条件是您不能比较同一数组中的元素。
答案 0 :(得分:5)
我可以根据快速排序为您提供 O(N * log(N))时间复杂度的算法。
时间复杂度: T(N)= 2 * T(N / 2)+ O(N)。因此根据主定理,总体复杂度为O(N * log(N))。
答案 1 :(得分:1)
我不确定我是否正确理解了这个问题,但根据我的理解,任务如下:
对给定数组
a
进行排序,而不用直接比较a
中的任意两个元素。但是我们得到第二个数组b
,它保证包含与a
相同的元素,但是按任意顺序排列。您不能修改b
(否则只需排序b
并将其返回...)。
如果a
中的元素不同,则很容易:a
中的每个元素都会计算b
中的元素数量是多少。这个数字按排序顺序给出了(零基础)索引。
元素不一定是不同的情况留给读者:)
答案 2 :(得分:-1)
我不确定这是否是作弊,但为什么不将b的索引存储到a中。然后使用快速排序对a进行排序,但比较b [a [x]] b [a [y]]。那么你不是直接比较任何两个元素。完成后,只需将a中的索引值替换为它们指向的b的实际值。
(编辑OP后编辑)
如果我现在已经看到了这个问题,那么我的“他们真正想要的答案”就是答案: 通过将a复制到b(它们具有相同的内容)来重新排序b以匹配a。使用您选择的快速算法排序,但在比较时,将[x]与b [y]进行比较。对两个阵列进行相同的交换。您正在排序两者而不比较同一数组中的元素。