使用Delphi进行排序机制逆转

时间:2014-09-04 18:17:51

标签: arrays delphi sorting

我知道这是一个奇怪的想法,我想知道是否有可能扭转排序机制,(我不想颠倒顺序)。

例如,假设我有一个随机数组的整数,然后我用quicksort方法对数组进行排序,现在我想回去取消对数组的排序并将其恢复原状。

你可能会建议我保存一个数组的副本,这不是我想要的,把它想象成一个时间线,并且能够向前或向后排序方法。

如果有可能,请考虑向我展示使用Delphi XE的最佳方法。

提前致谢。

4 个答案:

答案 0 :(得分:4)

无法解开。你必须要么:

  1. 创建一个单独的数组,该数组包含值的副本,然后对该数组进行排序,以便您可以保留原始数组。

  2. 创建一个单独的数组,该数组包含指向原始数组中值的指针/索引,然后使用它引用的值对第二个数组进行排序。

答案 1 :(得分:4)

我通常使用一个函数,给定一个数组返回一个已排序索引的数组。

通过这种方式,您将始终拥有原始数据,并且您将能够使用以下类似的方式访问数据:

for jIndex in ASortedIndexesArray do
  ShowMessage(AOriginalArray[jIndex]);

希望这有帮助。

的Mirko

答案 2 :(得分:2)

如果您想将 视为一个时间线,并且能够向后或向前排序方法 ,那么就像时间轴一样组织它 - 一份文件。保存每一步,您就可以重现它。

如果数组是整数,索引将无法帮助您,因为一个索引(一个指针)占用与一个数组元素相同的内存。如果缺少RAM,请使用文件来存储和检索数组。如果您使用更大的数据结构,您可以像David建议的那样创建,存储和检索索引。

答案 3 :(得分:2)

您可以将快速排序(或您使用的任何排序算法)所做的交换操作记录到列表中,然后在该列表中前进和后退以撤消/重做这些操作。实施起来并不简单,但可行。