我正在尝试编写合并排序的代码,但在使用随机值进行测试时显示错误。 它编译完美,所以我在弄清楚它时遇到了问题。
是不是因为我没用过
void mrg(int a[],int l, int m, int r)
{
int n1=m-l+1;
int n2=r-m;
int *l1=new int[n1];
int *r1=new int[n2];
for(int i=0;i<n1;i++)
{
l1[i]=a[l+i];
}
for(int i=0;i<n2;i++)
{
r1[i]=a[m+1+i];
}
int l2=0,r2=0;
for(int i=l;i<=r;i++)
{
if(l1[l2]>r1[r2])
{
a[i]=r1[r2];
r2++;
}else
{
a[i]=l1[l2];
l2++;
}
if(i==m)
{
if(l2==n1)
{
for(int j=i+1;j<=r;j++)
{
a[i]=r1[r2];
r2++;
}
break;
}
if(r2==n2)
{
for(int j=i+1;j<=r;j++)
{
a[i]=l1[l2];
l2++;
}
break;
}
}
}
delete[] l1;
delete[] r1;
}
void mrgesort(int a[], int l, int r)
{
int m=l+(r-1)/2;
mrgesort(a,l,m);
mrgesort(a,m,r);
mrg(a,l,m,r);
}
在使用数组给出输入后,它退出程序而不显示输出。