int auxB[20];
void mergeA3(int a[],int b[],int l,int m,int r)
{//无复制双调就位排序
int i = l,j = m + 1;
int k = l;
for (;(k <= r)&&(j <= r)&&(i <= m); ++k)
{
if (b[i] < b[j])
{
a[k] = b[i++];
}
else
{
a[k] = b[j++];
}
}
if (j > r)
{
for (;k <= r;++k)
{
a[k] = b[i++];
}
}
else
{
for (;k <= r;++k)
{
a[k] = b[j++];
}
}
}
void mergesortABr(int a[],int b[],int l,int r)
{//这个必须要一个和原数组一样大的空间辅助数组的大小取值的范围是[1,N]
if (l >= r)
{
return;
}
int mid = (l+r)/2;
mergesortABr(b,a,l,mid);
mergesortABr(b,a,mid+1,r);
mergeA3(a,b,l,mid,r);
}
void mergesortAB(int a[],int l,int r)
{
int i;
for (i = l;i <= r;i++)
{
auxB[i] = a[i];
}
mergesortABr(a,auxB,l,r);
}