Olá!
Procurei no fórum e não encontrei nenhum post a respeito desse tipo de ordenação.
Esse algorítimo quebra o vetor de tamanho n em subvetores e se chama recursivamente até que os subvetores tenham tamanho 1.
Depois, compara dois subvetores colando na posição 1 o subvetor menor e na posição 2 o subvetor maior.
E depois volta a comparar os subvetores à direita e à esquerda até ter o vetor original ordenado.

Estou implementando esse algoritmo porém, não estou conseguindo dividir o vetor até que length seja = 1.

mergesort=function(x){ # Função que irá dividir o subvetor ao meio
        subsort=function(y,z){ #Função que vai juntando ordenadamente as partes da entrada
                resultado=NULL 

tam=length(x) # Se a entrada tiver mais de um elemento, o algoritmo irá "quebrar" a entrada ao "meio" para ordenar individualmente cada entrada e depois juntar as metades já ordenadas
        if(tamanho>1)
             {
                meio= tam/2
                esq=c[1:flor(meio)]
                dit=c[(meio+1):tam] 
                esq=mergesort(esq) #vou ter que ficar aplicando o mergesort até o vetor da esquerda ter um elemento.
                dit=mergesort(dit) #vou ter que ficar aplicando o mergesort até o vetor da direita ter um elemento
                if(esq[length(esq)]<=dit[1])  #se o vetor da esquerda do tamanho da esquerda (que deve ser um) for menor ou igual a 1
                {
                        return(c(esq,dit))      #na hora de juntar o subvetor da esquerda fica primeiro.
                }
                else
                {
                        subsort(esq,dit) #subsort é o vetor temporário.
                }
        }
        else  # Se a entrada for um único elemento não existe ordenação. Se TAM<1. devolve o elemento.
        {
                return(x)
        }


Obrigada!

Att,
Jackeline