You are on page 1of 2

// Recursivitate si Divide et impera

#include <stdio.h>
#include <stdlib.h>

void interclasare(int v[], int w[], int st, int m, int dr)
{
    int i, j, k;
    i=st;
    j=m+1;
    k=0;
    while(i<=m && j<=dr)
        if(v[i]<=v[j])
            w[k++]=v[i++];
        else
            w[k++]=v[j++];
    while(i<=m)
        w[k++]=v[i++];
    while(j<=dr)
        w[k++]=v[j++];
    for(i=0;i<k;i++)
        v[i+st]=w[i];
}
void mergesort(int v[], int w[], int st, int dr)
{
    int m;
    if(st<dr)
    {
        m=(st+dr)/2;
        mergesort(v,w,st,m);
        mergesort(v,w,m+1,dr);
        interclasare(v,w,st,m,dr);
    }
}

int main() {

   int v[100], w[100];


   int nr, i;
   printf("Introduceti nuamrul de valori din v[]:\n");
   scanf("%i", &nr);
   for(i=0;i<nr;i++)
     {
         printf("v[%i]=", i);
         scanf("%i", &v[i]);
     }

   printf("Vectorul inainte de sortare\n");


   for(i = 0; i <nr; i++)
      printf("%d ", v[i]);

   mergesort(v,w,0,nr-1);

   printf("\nVectorul dupa sortare\n");


   for(i = 0; i <nr; i++)
      printf("%d ", v[i]);

    return (0);


}

You might also like