2

我正在尝试声明一个函数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 列表。

帮助?

4

1 回答 1

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