题目
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
分析
方法一
从头到尾扫描数组,没扫描到一个数字,就逐个比较该数字和后面的数字的大小,时间复杂度是 $O(n^2)$。
方法二
先把数组分隔成子数组, 先统计出子数组内部的逆序对的数目,然后再统计出两个相邻子数组之间的逆序对的数目。在统计逆序对的过程中,还需要对数组进行排序。这个排序的过程实际上就是归并排序。
该方法会改变原数组,在data和copy之间交替作为辅助数组。
实现
|
|