检查是否可以使用给定的操作对排列进行排序

时间:2015-07-04 17:47:04

标签: algorithm sorting


我有以下问题:
我的任务是确定是否可以对给定的排列进行排序,但只使用一种类型的操作:我们可以将第i个元素向左移动两个位置。同样,元素i-1和i-2向右移动一个位置。

例如: 可以对排列进行排序(2,5,3,4,1),但我们不能通过排列(2,3,5,4,1)来进行排序。

(2,5,3,的 4 下,1)
(2,4,5-, 3 下,1)
(2,3,4,5-, 1
(2,3的 1 下,4,5)
(1,2,3,4,5)

复杂性应该是线性的。 我提出了二次解决方案,但它太慢了。我尝试过贪婪的方法,但失败了。

这个问题让我完全陷入困境。

1 个答案:

答案 0 :(得分:1)

如果存在偶数个反转,则可以仅使用此操作对排列进行排序。您可以使用O(n log n)中的合并排序来计算反转。