私は以下のコードをcで書いていますが、次のプログラムの出力は常にガーベジの値の配列です、私のすべての整数はどこかで失われています。です。 はあなたに感謝:)あなたは二番目の配列におけるいくつかの要素が正しい場所にまだない間、アレイの1のすべての要素の一つが、結果に置かれた状態をチェックしていないマージソートは出力としてガーベッジの値を与えています
#include<stdio.h>
#include<malloc.h>
void merge(int a[],int beg,int mid,int end)
{
int n1=mid-beg+1;
int n2=end-mid;
int i=0,j=0,k=0;
int *p1 = (int*)malloc((n1)*sizeof(int));
int *p2 = (int*)malloc((n2)*sizeof(int));
for(i=0;i<n1;i++)
p1[i]=a[beg+i];
for(j=0;j<n2;j++)
p2[j]=a[mid+1+j];
i=j=0;
for(k=beg;k<=end;k++)
{
if(p1[i]<=p2[j])
{
a[k]=p1[i];
i=i+1;
}
else {
a[k]=p2[j];
j=j+1; }
}
}
void merge_sort(int a[],int beg,int end)
{
if(beg<end)
{
int mid=(beg+end)/2;
merge_sort(a,beg,mid);
merge_sort(a,mid+1,end);
merge(a,beg,mid,end);
}
}
void main()
{
printf("Enter Array of size 10:\n");
int a[10],i;
for(i=0;i<10;i++)
scanf("\n%d",&a[i]);
int n=sizeof a/sizeof a[0];
merge_sort(a,0,n-1);
printf("\nSorted array is:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
}
あなたは 'i> = n1'または' j> = n2'でも 'k <= end'のときの条件を考慮していません。 –
コードを書式設定する必要があります。 –
ようこそStackOverflowへ。 [ツアー]を取ってください。 よくある質問stackoverflow.com/help/how-to-ask、 [mcve]を作成してください。 Mcveには、サンプルインアウト、所望の出力、実際の出力、およびそれがどのように失敗するか、すなわちそれが「ゴミ」になるものが含まれているべきである。コードに適切な書式設定とインデントを使用します。 デバッグコードのヘルプをお探しの場合は、https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch