反转列表的最快方法? (只能交换相邻的元素)

时间:2011-12-28 02:43:45

标签: list sorting theory

这是一个理论/数学问题。也许有人会找到它的用途。

我正在重新排列Inkscape中的一些图层,试图反转整个堆栈,我想知道什么是最快(即最少移动)的方式来反转列表给定约束,你只能交换两个相邻的项目时间。

最简单的方法类似于冒泡排序:

a,b,c,d,e,f - > b,a,c,d,e,f - > b,c,a,d,e,f - > b,c,d,a,e,f - > ... - > F,E,d,C,B,A

但是有更快的方法吗?

2 个答案:

答案 0 :(得分:3)

不,我认为你所拥有的是掉期数量最少。你执行五个以便a到达结尾,然后再执行四个以使b到达倒数第二个位置,依此类推。

移动a时进行的任何其他互换都不会导致a更近。

因此{a, b, c, d, e, f}的最小交换计数为5 + 4 + 3 + 2 + 1。这与冒泡排序一样有效,因此对于任何体面的数据都应该避免。但是,如果数据大小足够小,没有人注意到,即使冒泡也是可以的。

在我看来,如果您的域名是Inkscape,那么您实际上不会拥有特别多的图层。对于更通用的域,您必须吮吸它并查看: - )

答案 1 :(得分:0)

最快的方法是从最后一个元素到第一个元素遍历相同的列表。根本没有互换。