题目(数组中的逆序对)
有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。
给定一个 int 数组 A 和它的大小 n,请返回A中的逆序对个数。保证 n 小于等于 5000。
算法思路
算法思想主要利用归并排序,唯一不同的主要在:当左边 i 位置所在的数大于右边 j 位置所在的数时,需要多算一步,即算出逆序对的个数,个数为 i 到 mid 之间的数字个数(i 为当前指向左部分的指针,j 为当前指向右部分的指针,mid 为两部分的中间位置)。
算法实现
复杂度
复杂度和归并排序相同。时间复杂度为 O(nlogn),空间复杂度为 O(n)。
参考
[1] <<剑指offer2>>
[2] 牛客网