/****************************************************************** 题目:在数组中的两个数字如果前面的一个数字大于后面的数字,则这两个 数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 *******************************************************************/ /* 解题思路: 先把数组分隔成子数组,先统计子数组内部的逆序对的数目,然后再统计出两个 相邻子数组之间的逆序对的数目。在统计逆序对的过程中,还需要读数组进行排 序。如果对排序算法很熟悉,我们不难发现这个排序的过程实际上就是归并排序。 */ #includeint inversePair(int* data, int* copy, int start, int end); int inversePair(int* data, int length) { if(data == NULL || length <=0) return 0; int* copy = new int[length]; for(int i=0; i = start && j >= start + length + 1) { if(data[i] > data[j]) { copy[indexCopy--] = data[i--]; count += j - start - length; } else { copy[indexCopy--] = data[j--]; } } for(; i >= start; --i) copy[indexCopy--] = data[i]; for(; j >= start + length + 1; --j) copy[indexCopy--] = data[j]; return left + right + count; } */