<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>