我已经写了下面的代码在C,但下面的程序的输出始终垃圾值的数组,我所有的输入整数要去哪里丢失,请帮助,告诉我什么,在哪里错误是。 谢谢:)归并排序是给垃圾值作为输出
#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 <=结束'的情况。 –
而且你需要格式化你的代码。 –
欢迎来到StackOverflow。 请参考[游览], 学习问好问题stackoverflow.com/help/how-to-ask, 做个[mcve]。 Mcve应该包含样本inout,期望的产量,实际产量以及它如何失败,即是什么使其成为“垃圾”。为您的代码使用正确的格式和缩进。 如果您正在寻找与调试代码帮助看https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch