Ich habe folgenden Code in c geschrieben, aber die Ausgabe des folgenden Programms ist immer ein Array von Müll Wert, meine alle eingegebenen Ganzzahlen werden irgendwo verloren, bitte helfen und sagen Sie mir, was und wo Fehler ist. danke :)Merge Sortierung gibt Müll Wert als Ausgabe
#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]);
}
Sie haben die Bedingung nicht berücksichtigt, wenn "i> = n1" oder "j> = n2", aber immer noch "k <= Ende". –
Und Sie müssen Ihren Code formatieren. –
Willkommen bei StackOverflow. Bitte nehmen Sie die [Tour], lernen, gute Fragen zu stellen stackoverflow.com/help/how-to-ask, machen eine [MCVE]. Mcve sollte Sample Inout, gewünschte Ausgabe, tatsächliche Ausgabe und wie es fehlschlägt, d. H. Was es "Müll" macht, enthalten. Verwenden Sie die richtige Formatierung und Einrückung für Ihren Code. Wenn Sie Hilfe mit Debugging-Code suchen, siehe https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch