合并排序问题????
void merge(float c[],float d[],int l,int m,int r){
int i=l,j=m+1,k=l;
while((i<=m)&&(j<=r))
if(c[i]<=c[j]) d[k++]=c[i++];
else d[k++]=c[j++];
if(i>m) for(int q=j;q<=r;q++) d[k++]=c[q];
else for(int q=i;q<=m;q++) d[k++]=c[q];
}
void mergepass(float x[],float y[],int s) //合并大小相邻的子数组
{int i=0;
while(i<=M-2*s)
{
merge(x,y,i,i+s-1,i+2*s-1);
i=i+2*s;
};
if(i+s<M) merge(x,y,i,i+s-1,M-1);
else for(j=i;j<M-1;j++) x[j]=y[j];
}
void mergesort(float *a)
{ float *b=new float[M];
int s=1;
while(s<M)
{
mergepass(a,b,s);//合并到a
s+=s;
mergepass(b,a,s);//合并到b
s+=s;
}
}
为什么总是M=4n-1时排序出错????