#include <cstdio>
#include <cstdlib>
using namespace std;
int num[10]={2,1,33,4,56,76,32,79,0,561};
void merge(int* num,int p,int q,int r)
{
int n1,n2;
n1=q-p+1;
n2=r-q;
int lt[11],rt[11];
int i;
for(i=0;i<n1;i++)
lt[i]=num[p+i];
for(i=0;i<n2;i++)
rt[i]=num[q+i+1];
lt[n1]=1000;
rt[n2]=1000;
int k,j;
i=0;
j=0;
for(k=p;k<=r;k++)
{
if(lt[i]<=rt[j])
num[k]=lt[i++];
else
num[k]=rt[j++];
}
return;
}
void mergesort(int* num,int p,int r)
{
int q;
if(p>=r)
return;
q=(p+r)/2;
mergesort(num,p,q);
mergesort(num,q+1,r);
merge(num,p,q,r);
return;
}
int main()
{
int i,j;
mergesort(num,0,9);
for(j=0;j<10;j++)
printf("%d ",num[j]);
return 0;
}
可在此基础上进行逆序对计算。