基于与不同顺序的相同元素的另一个数组的比较对数组进行排序

时间:2011-09-01 17:14:52

标签: algorithm sorting

给出两个数组

a[] = {1,3,2,4} 
b[] = {4,2,3,1} 

两者将具有相同的数字,但顺序不同。 我们必须对两者进行排序。条件是您不能比较同一数组中的元素。

3 个答案:

答案 0 :(得分:5)

我可以根据快速排序为您提供 O(N * log(N))时间复杂度的算法。

  1. 随机选择数组A中的元素a1
  2. 使用a1来分区数组B,请注意您只需将数组B中的每个元素与a1进行比较
  3. 分区返回位置b1。使用b1分区数组A(与步骤2相同)
  4. 如果分区的子阵列的长度大于1,请转到步骤1。
  5. 时间复杂度: 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]进行比较。对两个阵列进行相同的交换。您正在排序两者而不比较同一数组中的元素。