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++;
  }