- void mergeSort(int b, int e,int &change)
- {
- if(e-b<=0)return ;
- int mid=(b+e)/2,p1=b,p2=mid+1,i=b;
- mergeSort(b,mid);mergeSort(mid+1,e);
- while(p1<=mid || p2<=e)//p1 mid p2 e
- {
- if(p1<=mid && p2<=e && a[p1]>a[p2]){
- change+=mid-p1+1;//逆序数出现的次数
- }
- if(p2>e || (p1<=mid && a[p1]<=a[p2]))
- t[i++]=a[p1++];
- else
- t[i++]=a[p2++];
- }
- for(i=b;i<=e;i++)a[i]=t[i];
- }