从全局排序顺序对 N 个不同列表进行排序的算法

标签 algorithm sorting

我有 N 个项目列表

例如:

  • A、B、C、D
  • 1, 2, 3
  • V、W、X、Y、Z

它们被扁平化为一个长列表,用户可以根据自己的喜好选择顺序

例如:

1, C, X, 3, B, A, Y, Z, 2, W, D, V

我需要重新排序我的 N 个原始列表,以便它们的相对排序顺序与用户的排序相匹配

例如:

  • C、B、A、D
  • 1, 3, 2
  • X, Y, Z, W, V

简单的蛮力方法是创建 N 个新的空容器,遍历用户的订单,并在遇到每个项目时将其添加到相关容器中。

有没有更优雅的方法?

最佳答案

除非可以对数据的排序做出假设,否则可能没有更优雅的方法。

您必须在某个时候创建​​ N 个新容器中的每一个。

您还必须在某个时候向这 N 个容器中添加必要的元素。

这两件事是避免不了的。您的方法仅包含这两者,仅此而已,因此被证明是最小的。

一个小警告是 block 数组复制比迭代复制稍微快一些,所以如果你知道大块是相同的,那么你可以为这些 block 制作一个稍微快一些的复制。但通常,为了获得该信息,您必须首先访问和分析数据。因此,与其访问和分析,不如访问和插入。

关于从全局排序顺序对 N 个不同列表进行排序的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750778/

相关文章:

linux - Bash shell - 按第二个字母对单词列表进行排序?

algorithm - spoj 上 LIS2 的方法

java - 避免在 Java 8 stream reduce 方法中使用全局变量

javascript - 如何通过 Levenshtein 算法使用动态规划(在 Javascript 中)

algorithm - Vim:排序命令的算法

Python:如何按几个值对字典列表进行排序?

java - 使用堆栈解决迷宫

Python:根据两个属性对列表进行排序

linux - 对文件中具有指定模式最高值的行进行排序

java - 如何对对象的数组列表进行排序?