我们有n个数字,我们想要对它进行排序。但是在排序中我们可以交换两个相邻的数字。(我的意思是如果(A(i)> A(i + 1)那么我们可以将A(i)与A(i + 1)交换但不交换A(i + 3)用A(i))。在O(nlogn)中这很重要。 知道如何做到这一点?! :)
答案 0 :(得分:0)
您对交换有限制,但在阅读时则没有。因此,您可以首先在阵列的副本上使用类似快速排序或弹出窗口的东西来计算最终位置。然后你可以写一些东西,将值冒泡到真实数组中的最终位置。
答案 1 :(得分:0)
在最坏的情况下,不可能实现O(nlogn)。考虑一下这个数组:
n (n-1) ... 2 1
您不能使用少于n(n-1)/ 2次操作对此进行排序。为什么?让我们做一些有用的定义。如果i A(j)的。原始数组中有n(n-1)/ 2个反转。排序数组中有多少个反转?答案:0。
每个交换最多只能删除一个逆转,因此至少需要n(n-1)/ 2个交换。