用于按其中一个数组的值同步对两个数组进行排序的与编程语言无关的术语是什么

问题描述 投票:0回答:5

假设我们有两个数组:

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

所以我们现在想要的是,对数组 a 进行排序。 所以排序的结果应该是

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]]

问题比较简单。这种排序有名字吗? :

arrays algorithm sorting language-agnostic
5个回答
3
投票

您只需找到一个数组的排序排列(a 为 [2,1,4,3] )并将其应用于另一个数组。许多语言都能很好地处理这个问题。

例如,在 Matlab 中,您可以调用

[sortedA, sortedBy] = sort([4 3 8 7]);
然后
sortedA = a(sortedBy) = [3 4 7 8]
sortedBy = [2 1 4 3]
,因此您的新 b 将是
b(sortBy)


2
投票

其实,这种事情并不少见,虽然现在不像过去那么普遍了。它是标签排序思想的扩展,其中键被排序,然后按顺序读取和写入相应的记录。您通常会在以下情况下使用标签排序:

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

  • 在排序过程中在内存中移动大记录的成本非常高。更换钥匙需要更少的时间。

第二个现在并不是经常出现的问题,因为您通常对引用数组进行排序,这意味着唯一交换的内容是指针 - 每个 4 字节或 8 字节。

一些 API 内置支持这种类型的并行数组排序。例如,.NET

Array
类有一个 Sort(array, array) 方法,其工作原理与您所描述的完全一样。


2
投票

我不认为这样的东西有一个名字。请注意,这种“并行数组”通常不受欢迎,并且经常被刚接触编程但没有被教导如何正确使用类的人(学生)使用(无意冒犯)。如果两个数组之间存在关系,则应将它们放入某种对象中,然后对该对象进行排序。

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


1
投票

b
的值添加到
a
的键中,这样就得到了一个多维数组。然后对该数组进行排序。


0
投票

是的,PHP 中有一个名为 array_multisort 的数组排序函数,它可以满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.