[R-br] Recusão no R, problemas ao implementar o algoritimo insertionsort no R

Manoel Galdino mcz.fea em gmail.com
Terça Outubro 29 15:44:55 BRST 2013


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:

insertionsortR<-function(vetor,n) {

    if(n>1) {
        vetor <- insertionsortR(vetor,n-1) ## mudei o código aqui nessa
linha
        aux=vetor[n]
        i=n
        while(vetor[i-1]> aux && i > 1) {
            vetor[i]<-vetor[i-1]
            i<- i-1
            }
        vetor[i]<-aux
        }

    return(vetor)
    }



2013/10/29 Augusto Ribas <ribas.aca em gmail.com>

> 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.
>
> #Veja so. Eu tenho um vetor qualquer:
>
> vetor<-sample(100)
> vetor
>
> #Iterativamente ele funciona beleza, eu fiz assim:
>
> insertionsort<-function(vetor){
>     n<-length(vetor)
>
>     for(i in 2:n) {
>         aux=vetor[i]
>         j=i-1
>         while(j>=1 && vetor[j]>aux) {
>             vetor[j+1]<-vetor[j]
>             j=j-1
>             }
>         vetor[j+1]=aux
>         }
>     return(vetor)
>     }
>
> insertionsort(vetor)
>
> #Mas quando tento usar recursão, não consigo fazer funcionar, ele não
> organiza
>
> insertionsortR<-function(vetor,n) {
>
>     if(n>1) {
>         insertionsortR(vetor,n-1)
>         aux=vetor[n]
>         i=n
>         while(vetor[i-1]>aux && i>1) {
>             vetor[i]<-vetor[i-1]
>             i<-i-1
>             }
>         vetor[i]<-aux
>         }
>
>     return(vetor)
>     }
>
>
> insertionsortR(vetor,length(vetor))
>
> #Usando o rcpp ele funcionou dessa forma aqui:
>
> cppFunction("
>     NumericVector insertionsortRC(NumericVector vetor, int n) {
>
>         double aux;
>         int i;
>
>         if(n>1) {
>             insertionsortRC(vetor,n-1);
>             aux=vetor[n-1];
>             i=n-1;
>             while(vetor[i-1]>aux && i>=0 ) {
>                 vetor[i]=vetor[i-1];
>                 i--;
>                 }
>             vetor[i]=aux;
>             }
>
>         return vetor;
>         }
>     ")
>
> insertionsortRC(vetor,length(vetor))
>
> 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.
>
> Recursão funciona beleza no R, por exemplo usando fatorial:
>
> fatorial<-function(n) {
>     if(n==1) {
>         return(1)
>         } else {
>             return(n*fatorial(n-1))
>             }
>     }
>
> fatorial(5)
>
> Mas no caso do vetor, não entendi o funcionamento ali dos vetores, se
> alguém puder dar uma luz :)
>
> --
> Grato
> Augusto C. A. Ribas
>
> Site Pessoal: http://recologia.com.br/ <http://augustoribas.heliohost.org>
> Github: https://github.com/Squiercg
> Lattes: http://lattes.cnpq.br/7355685961127056
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>



-- 
Manoel Galdino
https://sites.google.com/site/galdinomcz/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131029/17b7de03/attachment.html>


Mais detalhes sobre a lista de discussão R-br