数组中的逆序对

2014-11-24 01:03:43 · 作者: · 浏览: 0
/******************************************************************
题目:在数组中的两个数字如果前面的一个数字大于后面的数字,则这两个
数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
*******************************************************************/
/*
解题思路:
先把数组分隔成子数组,先统计子数组内部的逆序对的数目,然后再统计出两个
相邻子数组之间的逆序对的数目。在统计逆序对的过程中,还需要读数组进行排
序。如果对排序算法很熟悉,我们不难发现这个排序的过程实际上就是归并排序。
*/
#include
  
   

int 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; } */