//统计逆序对
int InversePairsCore(int arr[],int copy[],int start,int end)
{
if(start == end)
{
copy[start] = arr[start];
return 0;
}
int length = (end-start)/2;
int left = InversePairsCore(copy,arr,start,start+length);
int right = InversePairsCore(copy,arr,start+length+1,end);
//i初始化为前半段最后一个数字的下标
int i = start + length;
//j初始化为后半段最后一个数字的下标
int j = end;
int indexcopy = end;
int count = 0;
while(i >= start&&j>=start+length+1)
{
if(arr[i] > arr[j])
{
copy[indexcopy --] = arr[i--];
count += j - start - length;
}
else
copy[indexcopy --] = arr[j--];
}
while(i>=start)
copy[indexcopy --] = arr[i--];
while(j>=start+length+1)
copy[indexcopy --] = arr[j--];
return left + right + count;
}
int InversePairs(int arr[],int n)
{
if(arr == NULL || n < 0)
return 0;
int *copy = new int[n];
for(int i=0;i