您的位置:首页 > 其它

基于归并排序的逆序对数统计

2013-03-04 21:45 281 查看
int a[MAXN];
int N;
int cnt = 0;

void merge(int l,int m,int r);

void merge_sort(int l,int r)
{
if ( l < r )
{
int m = ( l + r ) >> 1;
merge_sort(l,m);
merge_sort(m + 1,r);
merge(l,m,r);
}
}

void merge(int l,int m,int r)
{
int n1 = m - l + 1;
int n2 = r - m;
int* A = (int *)malloc((n1 + 1) * sizeof(int));
int* B = (int *)malloc((n2 + 1) * sizeof(int));
A[n1] = B[n2] = 0x7fffffff;

int i,j,k;
for (i = 0, k = l; i < n1; i++,k++)
A[i] = a[k];
for (j = 0, k = m +1; j < n2; j++,k++)
B[j] = a[k];

i = j = 0;
for ( k = l; k <= r; k++)
{
if ( A[i] <= B[j] )
{
a[k] = A[i];
i++;
}
else
{
a[k] = B[j];
cnt += n1 - i;
j++;
}
}

free(A);
free(B);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: