3つの要素の配列に対して機能するマージソート用のCコードを作成しましたが、要素の数を増やすとガベージ値が与えられます。これは再帰的なコードなので、このタイプの問題は発生しません。何が間違っているのですか?これは、2,5,1881172767,32718のようなものの出力を与えました。私はこれらのゴミ値の起源を理解していません。Cでのソートコードが正しく動作しない
#include<stdio.h>
void merge(int *a,int s,int m,int e)
{
int l1,l2;
int c[50];
l1=m-s+1;
l2=e-m;
int i=0,i1=0,i2=0;
while(i1<l1 && i2<l2)
{
if(a[i1]<a[i2+m+1])
{
c[i]=a[i1];
i1++;
}
else
{
c[i]=a[i2+m+1];
i2++;
}
i++;
}
while(i1<l1)
{
c[i]=a[i1];
i1++;
i++;
}
while(i2<l2)
{
c[i]=a[i2+m+1];
i2++;
i++;
}
for(i=0;i<=e;i++)
{
a[i]=c[i];
}
}
void mergesort(int *a,int s,int e)
{
int m;
if(s<e)
{
m=(s+e)/2;
mergesort(a,s,m);
mergesort(a,m+1,e);
merge(a,s,m,e);
}
}
void main()
{
int i;
int a[4]={3,2,1,5};
mergesort(a,0,3);
for(i=0;i<4;i++)
printf("%d,",a[i]);
}
デバッガを使用してステップを実行します。 – zerkms
_ "" _のような出力を投稿しないでください。 **正確な出力を投稿し、代わりに期待したものを投稿してください。 –
より意味のある変数名を使用してください。 –