您的位置:首页 > 其它

归并排序求逆序数

2011-10-27 14:11 369 查看
#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

int cnt;

void mergesort(int i,int j,int *a,int *b)

{

if(j-i>1)

{

int m=(i+j)/2;

mergesort(i,m,a,b);

mergesort(m,j,a,b);

int p=i,q=m,l=i;

while(p<m||q<j)

{

if(q>=j||(p<m&&a[p]<=a[q])) b[l++]=a[p++];

else { b[l++]=a[q++]; cnt+=m-p;}

}

for(int k=i;k<j;k++)

a[k]=b[k];

}

}

int main ()

{

int a[10]={5,8,7,9,1,2,3,0,6,4};

int b[10];

cnt=0;

mergesort(0,10,a,b);

for(int i=0;i<10;i++)

printf("%d ",a[i]);

cout<<endl<<"cnt="<<cnt;

return 0;

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