我知道这是一个奇怪的想法,我想知道是否有可能扭转排序机制,(我不想颠倒顺序)。
例如,假设我有一个随机数组的整数,然后我用quicksort方法对数组进行排序,现在我想回去取消对数组的排序并将其恢复原状。你可能会建议我保存一个数组的副本,这不是我想要的,把它想象成一个时间线,并且能够向前或向后排序方法。
如果有可能,请考虑向我展示使用Delphi XE的最佳方法。
提前致谢。
答案 0 :(得分:4)
无法解开。你必须要么:
创建一个单独的数组,该数组包含值的副本,然后对该数组进行排序,以便您可以保留原始数组。
创建一个单独的数组,该数组包含指向原始数组中值的指针/索引,然后使用它引用的值对第二个数组进行排序。
答案 1 :(得分:4)
我通常使用一个函数,给定一个数组返回一个已排序索引的数组。
通过这种方式,您将始终拥有原始数据,并且您将能够使用以下类似的方式访问数据:
for jIndex in ASortedIndexesArray do
ShowMessage(AOriginalArray[jIndex]);
希望这有帮助。
的Mirko
答案 2 :(得分:2)
如果您想将 视为一个时间线,并且能够向后或向前排序方法 ,那么就像时间轴一样组织它 - 一份文件。保存每一步,您就可以重现它。
如果数组是整数,索引将无法帮助您,因为一个索引(一个指针)占用与一个数组元素相同的内存。如果缺少RAM,请使用文件来存储和检索数组。如果您使用更大的数据结构,您可以像David建议的那样创建,存储和检索索引。
答案 3 :(得分:2)
您可以将快速排序(或您使用的任何排序算法)所做的交换操作记录到列表中,然后在该列表中前进和后退以撤消/重做这些操作。实施起来并不简单,但可行。