void msort(int l,int r)
{
if(l==r)return;
else
{
int mid=(l+r)/2;
int a=l,b=mid+1,c=1;
msort(l,mid);
msort(mid+1,r);
while(a<=mid&&b<=r)
{
if(arr[a]>arr[b])
{
t[c]=arr[b];
num+=mid-a+1;//求逆序对的核心程序
c++;
b++;
}
else{
t[c]=arr[a];
c++;
a++;}
}
while(a<=mid)
{
t[c]=arr[a];
a++;
c++;
}
while(b<=r)
{t[c]=arr[b];
b++;
c++;}
for(int i=1;i<=r-l+1;i++)
arr[l-1+i]=t[i];
}
}
归并排序&求逆序对
最新推荐文章于 2023-11-25 20:53:51 发布