Un errore è quello perchè(con quelle due righe di codice copi nel vettore a il vettore c già ordinato) se guardi bene prima setti k con
codice:
 k=inf
e subito dopo controlli la condizione
codice:
 k<=inf
.E' normale che non ti eseguirà mai il ciclo perchè la condizione sarà sempre verificata. A te invece interessa il vettore ordinato dalla posizione inf alla posizione sup(vedi gli argomenti della funzione merge).
Quindi il ciclo for sarebbe corretto scriverlo cosi:
codice:
for(k=inf;k<sup;k++)
      a[k]=c[k];
poi ricordati che gli array in C partono da 0 : la chiamata nel main
codice:
 msort(a,1,n);
deve essere sostituita