codice:
#include <stdio.h>
#define dim 100

void merge(int a[], int inf, int med, int sup);
void msort(int a[], int i, int j);


int main(){
    
    int a[dim];
    int n, i, j;
    
    printf("inserire dimensioni vettore (max %d) = ", dim);
    scanf("%d", &n);
    
    for(i=0;i<n;i++){
                     printf("a[%d] = ", i);
                     scanf("%d", &a[i]);
                     }
    
msort(a,0,n-1);
for(i=0;i<n;i++)
printf("%d\n", a[i]);

system("pause");
return 0;
}

void msort(int a[], int i, int j){
     
     int med,temp;
     
     if(i+1==j){
                if(a[i]>a[j]){
                             temp=a[i];
                             a[i]=a[j];
                             a[j]=temp;
                             }
                }else{
                      if(i<j){
                                med=(i+j)/2;
                                msort(a,i,med);
                                msort(a,med+1,j);
                                merge(a,i,med,j);
                                }
                                
                      }
}

void merge(int a[], int inf, int med, int sup){
     int i,j,k;
     int c[100];
     
     
     i=inf;
     j=med+1;
     k=inf;
     
     while((i<=med)&&(j<=sup)){
                               if(a[i]<a[j])
                               {c[k]=a[i];i++;k++;}
                               else{c[k]=a[j];j++;k++;}
                               }
     while(i<=med)
         {c[k]=a[i];i++;k++;}
     while(j<=sup)
         {c[k]=a[j];j++;k++;}
     
     for(k=inf;k<=sup;k++)
     a[k]=c[k-inf];
}
FATTO COSì FUNZIONA il controllo if
codice:
if(i+1==j){
anche se non so il perchè...sono andato per esclusione ma l'intero programma non l'ho per niente capito...comunque GRAZIE MILLE senza di te non sarei riuscito a farlo funzionare!!!!