<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Consegui!<div><br></div><div>Vou postar o código para caso alguém precise.</div><div><br></div><div>Segue abaixo:</div><div><br></div><div><div>semisort=function(y,z) #Função que vai juntando dois vetores que estão ordenados</div><div>{</div><div>  resultado=NULL </div><div>  tam_y=length(y)</div><div>  tam_z=length(z)</div><div><br></div><div>  i=1</div><div>  while(tam_y>0 && tam_z>0) # Enquanto tiver elemento nos dois subvetores</div><div>  {</div><div>        if(y[1]<=z[1])       # se o primeiro elemento do subvetor a esquerda for menor que o primeiro elemento do subvetor a direita.</div><div>        {</div><div>            resultado[i]=y[1] #o resultado vai ser o elemento do vetor.</div><div>            y=y[-1] # Tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado</div><div>            tam_y=tam_y-1</div><div>        }</div><div>        else</div><div>        {</div><div>          resultado[i]=z[1]      # Se o primeiro elemento do vetor z for menor que o de y.</div><div>          z=z[-1]</div><div>          tam_z=tam_z-1                 #tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado</div><div>        }</div><div>        i<-i+1</div><div>  }</div><div><br></div><div>  if(tam_y==0)</div><div>  {</div><div>    resultado<-c(resultado,z)</div><div>  }else</div><div>  {</div><div>    resultado<-c(resultado,y)</div><div>  }</div><div><br></div><div>    return(resultado) # Retorna o resultado ordenado</div><div>}</div><div><br></div><div>mergesort=function(vet)  # Função que irá dividir o subvetor ao meio </div><div>{</div><div>  tam=length(vet)     #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</div><div> </div><div>  cat("chamada: mergesort(",vet,")","\n")</div><div>  </div><div>  if(tam>1)</div><div>  {</div><div>    meio=(tam/2)   </div><div>    esq=vet[1:floor(meio)] </div><div>    dit=vet[floor(meio+1):tam]      </div><div>    esq=mergesort(esq)</div><div>    dit=mergesort(dit)</div><div>    vet_ord=semisort(esq,dit) </div><div>    return(vet_ord)</div><div>  }</div><div>  else   # Se a entrada for um unico elemento não existe ordenação. Se TAM<1. devolve o elemento.</div><div>  {</div><div>     return(vet)</div><div>  }</div><div>}</div><br><div><div id="SkyDrivePlaceholder"></div>> From: beniltoncarvalho@gmail.com<br>> Date: Thu, 14 Mar 2013 15:21:12 -0300<br>> To: r-br@listas.c3sl.ufpr.br<br>> Subject: Re: [R-br] "Ordenação Mergesort"<br>> <br>> vc precisa explicar como vc esta' executando a funcao... comigo ela<br>> funciona como deveria:<br>> <br>> x = rnorm(10)<br>> mergesort(x)<br>> <br>> <br>> Em 14 de março de 2013 15:10, Jackeline Bonetti Campos<br>> <jackebcampos@hotmail.com> escreveu:<br>> > Entendi.<br>> > Porém , quando eu executo a função mergesort diz "vec não encontrado".<br>> > Porque será?<br>> ><br>> > Att,<br>> > Jackeline.<br>> ><br>> >> From: beniltoncarvalho@gmail.com<br>> >> Date: Thu, 14 Mar 2013 13:56:40 -0300<br>> ><br>> >> To: r-br@listas.c3sl.ufpr.br<br>> >> Subject: Re: [R-br] "Ordenação Mergesort"<br>> >><br>> >> exato, eu uso o i+1 p nao ter q ficar redimensionando o vetor a todo<br>> >> momento...<br>> >><br>> >> Em 14 de março de 2013 13:50, Jackeline Bonetti Campos<br>> >> <jackebcampos@hotmail.com> escreveu:<br>> >> > Verdade..<br>> >> > Vou separar em duas funções e fazer as chamadas recursivas e ver se da<br>> >> > certo!<br>> >> > Ta muito parecido com o seu. A maior diferença é na resposta.<br>> >> > A sua você criou um vetor do tamanho do vetor original e a partir que<br>> >> > foram<br>> >> > surgindo os menores valores você adotou i=1+i.<br>> >> > Correto?<br>> >> ><br>> >> > Obrigada novamente!<br>> >> ><br>> >> ><br>> >> >> From: beniltoncarvalho@gmail.com<br>> >> >> Date: Thu, 14 Mar 2013 13:12:49 -0300<br>> >> >> To: r-br@listas.c3sl.ufpr.br<br>> >> ><br>> >> >> Subject: Re: [R-br] "Ordenação Mergesort"<br>> >> >><br>> >> >> Pela "cara" do codigo, tudo o que vc precisa e' separar o codigo em<br>> >> >> duas funcoes... veja no que eu te mandei, que o mergesort chama ele<br>> >> >> proprio... e a ultima coisa e' fazer a ordenacao.<br>> >> >><br>> >> >> Em 14 de março de 2013 12:37, Jackeline Bonetti Campos<br>> >> >> <jackebcampos@hotmail.com> escreveu:<br>> >> >> > Olá Elias.<br>> >> >> > É o merge sort.<br>> >> >> ><br>> >> >> > Benilton Carvalho,obrigada!<br>> >> >> > Vou olhar a sua implementação.<br>> >> >> > Não mandei o código inteiro. Somente a parte que está dando erro.<br>> >> >> ><br>> >> >> > Segue abaixo o código todo:<br>> >> >> ><br>> >> >> > mergesort=function(x){ # Função que irá quebrar a entrada ao meio<br>> >> >> > cada<br>> >> >> > vez<br>> >> >> > que for acionada<br>> >> >> > semisort=function(y,z){ #Função que vai juntando ordenadamente as<br>> >> >> > partes da entrada<br>> >> >> > resultado=NULL<br>> >> >> > while(length(y)>0 & length(z)>0){ # Enquanto tiver elemento<br>> >> >> > nos dois subvetores<br>> >> >> > if(y[1]<=z[1]){ # se o primeiro elemento do subvetor<br>> >> >> > a esquerda for menor que o primeiro elemento do subvetor a direita<br>> >> >> > resultado=c(resultado,y[1])<br>> >> >> > y=y[-1] # Tira o primeiro elemento do vetor,<br>> >> >> > já que ele já foi adicionado ao resultado<br>> >> >> > }<br>> >> >> > else{<br>> >> >> > resultado=c(resultado,z[1])<br>> >> >> > z=z[-1]<br>> >> >> > }<br>> >> >> > }<br>> >> >> > if(length(y)>0){ # A partir do momento que acaba os<br>> >> >> > elementos em uma das metades, me resta "copiar" o que sobrou da outra<br>> >> >> > metade<br>> >> >> > resultado=c(resultado,y)<br>> >> >> > }<br>> >> >> > if(length(z)>0){<br>> >> >> > resultado=c(resultado,z)<br>> >> >> > }<br>> >> >> > return(resultado) # Retorna o resultado ordenado<br>> >> >> > }<br>> >> >> > tamanho=length(x) # Se a entrada tiver mais de um elemento, o<br>> >> >> > algoritmo irá "quebrar" a entrada ao "meio" para ordenar<br>> >> >> > individualmente<br>> >> >> > cada entrada e depois juntar as metades já ordenadas<br>> >> >> > if(tamanho>1){<br>> >> >> > meio= tamanho/2<br>> >> >> > esq=x[1:floor(meio)]<br>> >> >> > dit=x[floor(meio+1):tamanho]<br>> >> >> > esq=mergesort(esq)<br>> >> >> > dit=mergesort(dit)<br>> >> >> > if(esq[length(esq)]<=dit[1]){<br>> >> >> > return(c(esq,dit))<br>> >> >> > }<br>> >> >> > else{<br>> >> >> > semisort(esq,dit)<br>> >> >> > }<br>> >> >> > }<br>> >> >> > else{ # Se a entrada for um unico elemento, a ordenação dela é<br>> >> >> > trivial<br>> >> >> > return(x)<br>> >> >> > }<br>> >> >> > }<br>> >> >> ><br>> >> >> > Att,<br>> >> >> > Jackeline.<br>> >> >> ><br>> >> >> ><br>> >> >> >> From: eliaskrainski@yahoo.com.br<br>> >> >> >> To: r-br@listas.c3sl.ufpr.br<br>> >> >> >> Date: Thu, 14 Mar 2013 16:27:03 +0100<br>> >> >> >> Subject: Re: [R-br] "Ordenação Mergesort"<br>> >> >> ><br>> >> >> >><br>> >> >> >> Curiosidade: Esse algoritmo e' o quick sort?<br>> >> >> >><br>> >> >> >><br>> >> >> >> _______________________________________________<br>> >> >> >> R-br mailing list<br>> >> >> >> R-br@listas.c3sl.ufpr.br<br>> >> >> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> >> >> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br>> >> >> >> código mínimo reproduzível.<br>> >> >> ><br>> >> >> > _______________________________________________<br>> >> >> > R-br mailing list<br>> >> >> > R-br@listas.c3sl.ufpr.br<br>> >> >> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> >> >> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br>> >> >> > código<br>> >> >> > mínimo reproduzível.<br>> >> >> _______________________________________________<br>> >> >> R-br mailing list<br>> >> >> R-br@listas.c3sl.ufpr.br<br>> >> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> >> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br>> >> >> código mínimo reproduzível.<br>> >> ><br>> >> > _______________________________________________<br>> >> > R-br mailing list<br>> >> > R-br@listas.c3sl.ufpr.br<br>> >> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> >> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br>> >> > código<br>> >> > mínimo reproduzível.<br>> >> _______________________________________________<br>> >> R-br mailing list<br>> >> R-br@listas.c3sl.ufpr.br<br>> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br>> >> código mínimo reproduzível.<br>> ><br>> > _______________________________________________<br>> > R-br mailing list<br>> > R-br@listas.c3sl.ufpr.br<br>> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código<br>> > mínimo reproduzível.<br>> _______________________________________________<br>> R-br mailing list<br>> R-br@listas.c3sl.ufpr.br<br>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.<br></div></div>                                          </div></body>
</html>