您的位置:首页 > 其它

归并排序求逆序

2015-08-15 23:42 295 查看
LL inverse(int *arr, int len)
{
if (len==1)return 0;
LL inverseLeft=inverse(arr, len/2);
LL inverseRight=inverse(arr+len/2, len-len/2);
if(inverseRight>=mod) inverseRight %= mod;
if(inverseLeft>=mod) inverseLeft %=mod;
int i=0, j=len/2, k=0,inverse=0;
while (i<len/2 && j < len)
{
if (arr[i] <= arr[j])
sorted[k++] = arr[i++];
else
{
sorted[k++] = arr[j++];
inverse += len/2 - i;
}
}
while(i<len/2) sorted[k++] = arr[i++];
while(j<len) sorted[k++] = arr[j++];
memcpy(arr,sorted,len*sizeof(int));
return inverse+inverseLeft+inverseRight;
}
二分归并排序,个人模板
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: