<div dir="ltr"><div>Eu não entendi muito bem. Ajudaria se você comentasse seu código, desse nomes mais significativos (ao invés de "aux", que tal "valor_a_ser_inserido"?) e usasse uma sintaxe consistente (ora você usa "=" para atribuição, ora "<-", mas tente isso:</div>
<div><br></div><div><div style="font-family:arial,sans-serif;font-size:13px">insertionsortR<-function(vetor,n) {</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">
if(n>1) {</div><div style="font-family:arial,sans-serif;font-size:13px"> vetor <- insertionsortR(vetor,n-1) ## mudei o código aqui nessa linha</div><div style="font-family:arial,sans-serif;font-size:13px">
aux=vetor[n]</div><div style="font-family:arial,sans-serif;font-size:13px"> i=n</div><div style="font-family:arial,sans-serif;font-size:13px"> while(vetor[i-1]> aux && i > 1) {</div><div style="font-family:arial,sans-serif;font-size:13px">
vetor[i]<-vetor[i-1]</div><div style="font-family:arial,sans-serif;font-size:13px"> i<- i-1</div><div style="font-family:arial,sans-serif;font-size:13px"> }</div><div style="font-family:arial,sans-serif;font-size:13px">
vetor[i]<-aux</div><div style="font-family:arial,sans-serif;font-size:13px"> }</div><div style="font-family:arial,sans-serif;font-size:13px"> </div><div style="font-family:arial,sans-serif;font-size:13px">
return(vetor)</div><div style="font-family:arial,sans-serif;font-size:13px"> }</div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/29 Augusto Ribas <span dir="ltr"><<a href="mailto:ribas.aca@gmail.com" target="_blank">ribas.aca@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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>
<span class="HOEnZb"><font color="#888888">
<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>
</font></span></div></div>
<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>
Manoel Galdino<br><a href="https://sites.google.com/site/galdinomcz/" target="_blank">https://sites.google.com/site/galdinomcz/</a><br>
</div>