zynif Δημοσ. 18 Φεβρουαρίου 2014 Δημοσ. 18 Φεβρουαρίου 2014 Kαλησπέρα. Θέλω να υλοποιήσω σε C τον παρακάτω αλγόριθμο mergesort. Κάτι όμως πάει στραβά. Μπορείτε να βοηθήσετε ; #include <stdio.h> int* merge(int x[], int y[]); int* mergesort(int ar[]); void main(void) { int a[8],i; a[0]=25; a[1]=5; a[2]=12; a[3]=-5; a[4]=0; a[5]=3; a[6]=-9; a[7]=6; int *sort=mergesort(a); printf("Sorted\n"); for (i=0;i<8;i++) printf("%d\n",sort[i]); } int* merge(int x[],int y[]) { int i; int lenX=sizeof(x)/sizeof(int); int lenY=sizeof(y)/sizeof(int); int truncx[lenX-1]; int truncy[lenY-1]; int RetArr[lenX+lenY]; int *p; if (lenX==0) { return y; } if (lenY==0) { return x; } if (x[0]<=y[0]) { //create a copy of x but skip x[0] for (i=1;i<lenX;i++) { truncx[i-1]=x[i]; } p=merge(truncx,y); RetArr[0]=x[0]; for (i=0;i<lenX+lenY-1;i++) { RetArr[i+1]=p[i]; } return RetArr; } else { //create a copy of y but skip y[0] for (i=1;i<lenY;i++) { truncy[i-1]=y[i]; } p=merge(x,truncy); RetArr[0]=y[0]; for (i=0;i<lenX+lenY-1;i++) { RetArr[i+1]=p[i]; } return RetArr; } } int* mergesort(int ar[]) { printf("Calling mergesort\n"); int mikos=sizeof(ar)/sizeof(int); if (mikos>1) { int mikosA,mikosB; mikosA=mikos/2; mikosB=mikos/2; int a[mikosA],b[mikosB]; int i,w; //spasimo se dyo meri for (i=0;i<mikosA;i++) { a[i]=ar[i]; printf("a %d\n",a[i]); } w=0; for (i=mikosB;i<mikos;i++) { b[w]=ar[i]; printf("b %d\n",b[w]); w++; } return merge(mergesort(a),mergesort(); } else { return ar; } }
Anubis13 Δημοσ. 18 Φεβρουαρίου 2014 Δημοσ. 18 Φεβρουαρίου 2014 Slide 225, 226: http://courses.softlab.ntua.gr/progintro/slides-20140131.pdf
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα