Il mergesort non è l'algoritmo che ti interessa, infatti. Serve ad ordinare un array, non a fonderne due in maniera ordinata (sebbene il suo funzionamento preveda qualcosa di simile).
In ogni caso l'algoritmo è corretto, c'è solo un volgare errore di codice. Correzione in rosso.
PS: non è escluso che la prof. inserisca ad arte questi errori per stimolarvi a trovarli e correggerli, quindi prova a farlo qualche volta. Se poi non lo fa di proposito (OMG), prova a debugare comunque da solo.
codice:
int i,j,k;
k=0;
i=0;
j=0;
int a[]= {2,3,6};
int n = 3;
int b[]= {4,5,7,9};
int m = 4;
int c[7];
while(i<n && j<m)
{
if(a[i]<b[j])
{
c[k] = a[i];
i++;
} else {
c[k] = b[j];
j++;
}
k++;
}
while(i<n)
{
c[k] = a[i];
i++;
k++;
}
while(j<m)
{
c[k] = b[j];
j++;
k++;
}