归并排序与逆序对联系紧密,使归并排序成为了必会的排序之一。
void msort(int l,int r)
{
if(l == r) return;
int mid = (l + r) >> 1;
msort(l,mid);msort(mid + 1,r);
int i = l, j = mid + 1, k = l;
while(i <= mid && j <= r)
{
if(a[i] <= a[j]) b[k++] = a[i++];
else
{
//ans += mid - i + 1;
b[k++] = a[j++];
}
}
while(i <= mid) b[k++] = a[i++];
while(j <= r) b[k++] = a[j++];
for(int i = l; i <= r; i++) a[i] = b[i];
}