算法练习 逆序对
逆序对问题算是很经典了,最简单的暴力破解时间复杂度O(n2),时间复杂度大于O(n2)的算法是非常糟糕了,所以我们采用归并排序的算法改动一下,即可获得O(nlogn)的算法。
逆序对定义:数列中如果 i < j && arr[i] > arr[j],则arr[i]和arr[j]为一对逆序对。
- java算法参考
// 逆序对个数
private static long ropCount = 0;
/**
* 计算逆序对
*
* @param arr
* @param left
* @param right
*/
public static void calcRop(int[] arr, int left, int right) {
if (left >= right)
return;
int mid = (left + right) >>> 1;
calcRop(arr, left, mid);
calcRop(arr, mid + 1, right);
calc(arr, left, mid, right);
}
/**
* 一次计算
*
* @param arr
* @param left
* @param mid
* @param right
*/
public static void calc(int[] arr, int left,