设A为size的数组N。(i,j)如果i < j和,我们将几个索引称为“反向”A[i] > A[j]
N
(i,j)
i < j
A[i] > A[j]
我需要找到一种接收大小数组N(具有唯一数字)并返回时间为的逆数的算法O(n*log(n))。
O(n*log(n))
您可以使用合并排序算法。
在合并算法的循环中,左半部分和右半部分都按升序排序,我们希望将它们合并为单个排序的数组。请注意,右侧的所有元素的索引都比左侧的元素高。
假设 array [leftIndex] > array [rightIndex]。这意味着紧随索引为 leftIndex的 元素之后,左侧部分中的所有元素也都大于右侧的当前元素(因为左侧的排序方式是递增的)。因此,右侧的当前元素会生成 numberOfElementsInTheLeftSide-leftIndex + 1 反转,因此将其添加到全局反转计数中。
算法完成执行后,您将得到答案,在最坏的情况下,合并排序为 O(n log n) 。