合并排序(更新中)

void Merge(int *c,int *d,int l,int m,int r)//l~m m+1~r
{
int i=l;//c[l~m]
int j=m+1;//c[m+1~r]
int k=l;//d[l~ ]
while(i<=m&&j<=r)
{
if(c[i]<=c[j]) d[k++]=c[i++];
else
{
d[k++]=c[j++];
}
}
if(i>m)
{
for(;j<=r+1;)
{
d[k++]=c[j++];
}
}
else
{
for(;i<=m+1;)
{
d[k++]=c[i++];
}
}
}

void MergePass(int *x,int *y,int s,int n)//n个数 下标 n-1
{
int i=0;
while(i<=n-1-2*s)// 距离n-1 2*s距离
{
Merge(x,y,i,i+s-1,i+2*s-1);
i+=2*s;
}
if(i<=n-1-s)
{
Merge(x,y,i,i+s-1,n-1);
}
else
{
for(;i<n;i++)
{
y[i]=x[i];
}
}
}

void MergeSort(int *a,int n)
{
int *b=new int [n];
int s=1;
while(s<n)
{
MergePass(a,b,s,n);
s+=s;
MergePass(b,a,s,n);
s+=s;
}
}
int main()
{



}

原文地址:https://www.cnblogs.com/suoloveyou/p/2472887.html