串联

2011-05-26 53 views
3

假设排序两个数组的奇事,我们有两个数组:串联

a = [4,3,8,7] 
b = [(1,2),(5,6),(8,6),(9,0)] 

所以我们希望现在的问题是,该阵列的排序。 所以排序的结果应该是a_sorted = [3,4,7,8]。 而且,我们不能对数组b进行排序。 相反,数组b的顺序必须根据数组a的排序顺序进行更改。

所以,数组b必须是b_sorted = [(5,6),(1,2),(9,0),(8,6)]

即,a_sorted的顺序将是a_sorted = [a[1],a[0],a[3],a[2]]。 相应地,b_sorted = [b[1],b[0],b[3],b[2]]

问题很简单。这种排序有没有名字? :

回答

2

事实上,这种事情并不少见,虽然今天比以往更少流行。这是标签分类想法的扩展,其中键被排序,然后按顺序读取和写入相应的记录。您通常会在以下情况下使用标记排序:

  • 没有足够的内存来加载要排序的所有记录,但可以轻松地加载密钥。

OR

  • 排序期间在内存中移动大量的记录是非常昂贵的。交换密钥需要更少的时间。

第二个问题现在不是很常见的问题,因为您通常会对引用数组进行排序,这意味着只能交换指针 - 每个4个字节或8个字节。

一些API已经内置支持这种类型的并行数组排序。例如,.NET Array类有一个Sort(array, array)方法,其工作方式与您描述的完全相同。

+0

非常感谢Jim!这当然有助于:) – sniper 2011-05-26 20:04:36

3

你只是发现一个数组的排序排列([2,1,4,3]为a)并将其应用于另一个。很多语言处理得很好。

例如,在Matlab,你可以叫[sortedA, sortedBy] = sort([4 3 8 7]);然后sortedA = a(sortedBy) = [3 4 7 8]sortedBy = [2 1 4 3],因此新的B将被b(sortBy)

2

我不认为有这样一个名字。请注意,这样的“平行阵列”通常被人们所忽视,并且经常被尚未被教过如何正确使用类的人(学生)使用(没有冒犯意味)。如果两个数组之间存在关系,则应该将它们放入某种对象中,然后应该对该对象进行排序。

这一切都取决于当然的情况。有人可能会使用无法将(自定义)对象中的相关属性分组的语言。

1

b的值加上a的键值,以便获得多维数组。然后排序该数组。

0

是的,在PHP中有一个名为array_multisort的数组排序函数,它可以做你想做的。