Ho sviluppato questo programma che mi permette di inserire n valori in 2 vettori di ordinare i 2 vettori in ordine crescente e di fare il merge dei due vettori in un terzo vettore.
codice:
 
#include <stdio.h>
#include <stdlib.h>
void gestione();
void inserimento(int, int, int *, int *);
void ordinamento(int, int, int *, int *);
void merge(int, int, int *, int *, int *);
void visualizzazione(int, int, int *, int *, int *);
main()
{
      gestione();
      system("PAUSE");
      return(0);
}

void gestione()
{
     int n,l;
     printf("Quanti valori vuoi inserire nel primo vettore?: ");
     scanf("%d",&n);
     int vett_1[n];
     printf("Quanti valori vuoi inserire nel secondo vettore?: ");
     scanf("%d",&l);
     printf("\n");
     int vett_2[l];
     int vett_3[n+l];
     inserimento(n, l, vett_1, vett_2);
     ordinamento(n, l, vett_1, vett_2);
     merge(n, l, vett_1, vett_2, vett_3);
     visualizzazione(n, l, vett_1, vett_2, vett_3);
}

void inserimento(int n, int l, int *primo, int *secondo)
{
    int i,j;
    for(i=0;i<n;i++){
                     printf("%d%c valore del primo vettore: ",i+1,248);
                     scanf("%d",&primo[i]);
                     }
    printf("\n");                 
    for(j=0;j<l;j++){
                     printf("%d%c valore del secondo vettore: ",j+1,248);
                     scanf("%d",&secondo[j]);
                     }

}

void ordinamento(int n, int l, int *primo, int *secondo)
{
     int z,i,j,k,p_aux,s_aux;
     for(z=0;z<n;z++)
     for(i=0;i<n;i++){
                      if(primo[i]>primo[i+1]){
                                              p_aux=primo[i];
                                              primo[i]=primo[i+1];
                                              primo[i+1]=p_aux;
                                              }
                      }
     for(k=0;k<l;k++)
     for(j=0;j<l;j++){
                      if(secondo[j]>secondo[j+1]){
                                                  s_aux=secondo[j];
                                                  secondo[j]=secondo[j+1];
                                                  secondo[j+1]=s_aux;
                                                  }
                      }

}
                                             

void merge(int n, int l, int *primo, int *secondo, int *terzo)
{
    int i = 0, j = 0, k = 0;
    do {
        if(primo[i]<=secondo[j])
                            terzo[k++] = primo[i++];
        else
            terzo[k++] = secondo[j++];
        }
        while(i<n && j<l);
        if(i<n)
               for(; i<n; terzo[k++] = primo[i++])
               ;
        else
            for(; j<l; terzo[k++] = secondo[j++])
            ;

}

void visualizzazione(int n, int l, int *primo, int *secondo, int *terzo)
{
    int i,j,k;
    printf("\n");
    for(i=0;i<n;i++){
                     printf("%d%c valore del primo vettore: %d\n",i+1,248,primo[i]);
                     }
    printf("\n");                 
    for(j=0;j<l;j++){
                     printf("%d%c valore del secondo vettore: %d\n",j+1,248,secondo[j]);
                     }
    printf("\n");
    for(k=0;k<(l+n);k++){
                         printf("%d%c valore della fusione dei due vettori: %d\n",k+1,248,terzo[k]);
                         }
}
Per quanto riguarda il merge:
codice:
void merge(int n, int l, int *primo, int *secondo, int *terzo)
{
    int i = 0, j = 0, k = 0;
    do {
        if(primo[i]<=secondo[j])
                            terzo[k++] = primo[i++];
        else
            terzo[k++] = secondo[j++];
        }
        while(i<n && j<l);
        if(i<n)
               for(; i<n; terzo[k++] = primo[i++])
               ;
        else
            for(; j<l; terzo[k++] = secondo[j++])
            ;

}
non riesco a farlo con il for ma solo con il do while...avete qualche idea di come eliminare il do while per sostituirlo con un ciclo for? Grazie in anticipo.