Da maneira que está implementada, a função mergeSort ordena os elementos no intervalo [inicio, fim] (ou seja, incluindo o elemento na posição fim). Depois da função separa, 'tl' é o número de palavras lidas, então o último elemento do vetor é aux[tl-1]. Então a chamada do mergeSort tem que ser mergeSort(aux, 0, tl-1).