我已經寫了下面的代碼在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