小编典典

计算排列中“反转”的数量

algorithm

设A为size的数组N(i,j)如果i < j和,我们将几个索引称为“反向”A[i] > A[j]

我需要找到一种接收大小数组N(具有唯一数字)并返回时间为的逆数的算法O(n*log(n))


阅读 283

收藏
2020-07-28

共1个答案

小编典典

您可以使用合并排序算法。

在合并算法的循环中,左半部分和右半部分都按升序排序,我们希望将它们合并为单个排序的数组。请注意,右侧的所有元素的索引都比左侧的元素高。

假设 array [leftIndex] > array [rightIndex]。这意味着紧随索引为 leftIndex的
元素之后,左侧部分中的所有元素也都大于右侧的当前元素(因为左侧的排序方式是递增的)。因此,右侧的当前元素会生成
numberOfElementsInTheLeftSide-leftIndex + 1 反转,因此将其添加到全局反转计数中。

算法完成执行后,您将得到答案,在最坏的情况下,合并排序为 O(n log n)

2020-07-28