可逆排序算法?

时间:2012-09-01 12:12:56

标签: algorithm sorting

有没有人知道可逆的排序算法?所以这个:

5,39,196,0,15,243

排序会创建:

0,5,15,39,196,243

然后在不知道任何知识的情况下反转它,除了使用哪种排序算法以及运行了多少次迭代之外,它还会回到:

5,39,196,0,15,243

在我看来,冒泡排序可能会起作用 - 只要我知道这种排序必须运行多少次,我可能只需要反转多次回到原始状态的步骤。还有其他人吗?

这是一个实验,所以时间复杂性不是问题(我不在乎它有多慢)。

2 个答案:

答案 0 :(得分:2)

如果您真的不关心运行时效率,可以使用Permutation Sort

它将生成列表的所有排列,并检查哪个排列列表已排序。如果你知道在找到排序列表之前已经运行了多少轮,你就可以确切地知道已经交换了哪些值来实现目标。

如果你在一个未排序的列表上运行它并且必须运行50轮以进入排序列表,你就会确切地知道交换了哪些元素并且可以反转排序。

答案 1 :(得分:2)

通常,排序算法会对n个项进行排序(通常为O(nlogn))。这意味着你最好保留副本(只有n< O(nlogn))。

如果副本太多(对象太大),您可以按初始顺序保留一组引用(指针或ID)。