有没有人知道可逆的排序算法?所以这个:
5,39,196,0,15,243
排序会创建:
0,5,15,39,196,243
然后在不知道任何知识的情况下反转它,除了使用哪种排序算法以及运行了多少次迭代之外,它还会回到:
5,39,196,0,15,243
在我看来,冒泡排序可能会起作用 - 只要我知道这种排序必须运行多少次,我可能只需要反转多次回到原始状态的步骤。还有其他人吗?
这是一个实验,所以时间复杂性不是问题(我不在乎它有多慢)。
答案 0 :(得分:2)
如果您真的不关心运行时效率,可以使用Permutation Sort。
它将生成列表的所有排列,并检查哪个排列列表已排序。如果你知道在找到排序列表之前已经运行了多少轮,你就可以确切地知道已经交换了哪些值来实现目标。
如果你在一个未排序的列表上运行它并且必须运行50轮以进入排序列表,你就会确切地知道交换了哪些元素并且可以反转排序。
答案 1 :(得分:2)
通常,排序算法会对n个项进行排序(通常为O(nlogn))。这意味着你最好保留副本(只有n< O(nlogn))。
如果副本太多(对象太大),您可以按初始顺序保留一组引用(指针或ID)。