我已经使用递归实现了合并排序。涉及的两个函数的代码如下:
void merge(int la[50],int ra[50],int lsize,int rsize)
{
cout<<"\nLEFT Array\n";
for(int i=0;i<lsize;i++)
{
cout<<la[i]<<" ";
}
cout<<"\nRIGHT Array\n";
for(int i=0;i<rsize;i++)
{
cout<<ra[i]<<" ";
}
int a[100],i,j,k;
i=0;
j=0;
k=0;
while((i<lsize)&&(j<rsize))
{
if(la[i]<ra[j])
{
a[k]=la[i];
k++;
i++;
}
else
{
a[k]=ra[j];
k++;
j++;
}
}
while(i < lsize)
{
a[k]=la[i];
k++;
i++;
}
while(j < rsize)
{
a[k]=ra[j];
k++;
j++;
}
cout<<"\nMERGED\n";
for(int i=0;i<k;i++)
{
cout<<a[i]<<" ";
}
}
void mergesort(int a[100],int n)
{
if(n == 1)
{
return;
}
else
{
int ra[50],la[50],lsize,rsize;
lsize = n/2;
rsize = n-lsize;
cout<<"\nLA\n";
for(int i=0;i<lsize;i++)
{
la[i]=a[i];
cout<<la[i]<<" ";
}
cout<<"\nRA\n";
for(int i=0;i<rsize;i++)
{
ra[i]=a[lsize+i];
cout<<ra[i]<<" ";
}
mergesort(la,lsize);
mergesort(ra,rsize);
merge(la,ra,lsize,rsize);
}
}
但是,在递归过程中,如果合并的子数组例如是 1,2,5,那么下次在合并函数中使用时,该数组将随机使用 2,1,5 或其他值。因此,我没有得到正确的排序输出。例如,我将未排序的数组输入为 3,5,1,4,2。这里发生的情况是,合并排序正确进行,直到在合并函数期间形成的合并数组 2,4 之一在用于计算更大的子数组时变为 4,2。因此合并排序出错了。请帮我解决我哪里出错了。