Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

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;
 }
}



post-197594-0-13839100-1392742560_thumb.png

post-197594-0-67066500-1392742576_thumb.png

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...