从真实列表中保存索引

时间:2010-11-02 15:00:59

标签: list sorting sml

我正在尝试声明一个函数sort : real list -> int list * real list,它使用mergesort对列表进行排序,并返回一个int列表,其中包含预先排序的各个数字的原始位置。

也许这个例子会让人们更容易理解:

sort [5.4,7.2,1.5,9.6] = ([2,0,1,3], [1.5,5.4,7.2,9.6]

现在对列表进行排序非常简单,但我很难弄清楚如何让它记住原始位置,然后用它制作一个int列表。

帮助?

1 个答案:

答案 0 :(得分:1)

  1. 创建一个包含原始列表的每个项目及其索引的对的列表(您可以使用ListPair.zip和索引列表(可以使用List.tabulate创建)来执行此操作)。
  2. 对该列表进行排序。
  3. 使用ListPair.unzip将已排序的对列表转换为一对列表。