归并排序&求逆序对

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];
    }   
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值