<div dir="ltr">Ola pessoa, eu estava tentando implementar o algorítimo insertion sort no R de forma recursiva, mas não estou conseguindo e também não consigo identificar onde estou errado.<div><br></div><div>#Veja so. Eu tenho um vetor qualquer:</div>
<div><br></div><div><div>vetor<-sample(100)</div><div>vetor</div><div><br></div><div>#Iterativamente ele funciona beleza, eu fiz assim:</div><div><br></div><div><div>insertionsort<-function(vetor){</div><div>    n<-length(vetor)</div>
<div><br></div><div>    for(i in 2:n) {</div><div>        aux=vetor[i]</div><div>        j=i-1</div><div>        while(j>=1 && vetor[j]>aux) {</div><div>            vetor[j+1]<-vetor[j]</div><div>            j=j-1</div>
<div>            }</div><div>        vetor[j+1]=aux</div><div>        }</div><div>    return(vetor)</div><div>    }</div><div><br></div><div>insertionsort(vetor)</div></div><div><br></div><div>#Mas quando tento usar recursão, não consigo fazer funcionar, ele não organiza</div>
<div><br></div><div><div>insertionsortR<-function(vetor,n) {</div><div><br></div><div>    if(n>1) {</div><div>        insertionsortR(vetor,n-1)</div><div>        aux=vetor[n]</div><div>        i=n</div><div>        while(vetor[i-1]>aux && i>1) {</div>
<div>            vetor[i]<-vetor[i-1]</div><div>            i<-i-1</div><div>            }</div><div>        vetor[i]<-aux</div><div>        }</div><div>    </div><div>    return(vetor)</div><div>    }</div><div>
<br></div><div><br></div><div>insertionsortR(vetor,length(vetor))</div></div><div><br></div><div>#Usando o rcpp ele funcionou dessa forma aqui:</div><div><br></div><div><div>cppFunction("</div><div>    NumericVector insertionsortRC(NumericVector vetor, int n) {</div>
<div><br></div><div>        double aux;</div><div>        int i;</div><div><br></div><div>        if(n>1) {</div><div>            insertionsortRC(vetor,n-1);</div><div>            aux=vetor[n-1];</div><div>            i=n-1;</div>
<div>            while(vetor[i-1]>aux && i>=0 ) {</div><div>                vetor[i]=vetor[i-1];</div><div>                i--;</div><div>                }</div><div>            vetor[i]=aux;</div><div>            }</div>
<div><br></div><div>        return vetor;</div><div>        }</div><div>    ")</div><div><br></div><div>insertionsortRC(vetor,length(vetor))</div></div><div><br></div><div>Alguém sabe dizer onde estou errado la no insertionsort no R. Eu imagino se estou imaginado errado o funcionamento dos vetores no R, se ele ta refazendo um novo vetor a cada chamada e no final nada da certo do jeito que estou fazendo.</div>
<div><br></div><div>Recursão funciona beleza no R, por exemplo usando fatorial:</div><div><br></div><div><div>fatorial<-function(n) {</div><div>    if(n==1) {</div><div>        return(1)</div><div>        } else {</div>
<div>            return(n*fatorial(n-1))</div><div>            }</div><div>    }</div><div><br></div><div>fatorial(5)</div></div><div><br></div><div>Mas no caso do vetor, não entendi o funcionamento ali dos vetores, se alguém puder dar uma luz :)</div>
<div><br></div>-- <br><div dir="ltr"><div>Grato<br>Augusto C. A. Ribas</div>
<div> </div>
<div>Site Pessoal: <a href="http://recologia.com.br/" target="_blank">http://recologia.com.br/</a><a href="http://augustoribas.heliohost.org" target="_blank"></a></div><div>Github: <a href="https://github.com/Squiercg" target="_blank">https://github.com/Squiercg</a></div>

<div>Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br></div></div>
</div></div>