<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'>
Olá Elias.<div>É o merge sort.</div><div><br></div><div>Benilton Carvalho,obrigada!</div><div>Vou olhar a sua implementação.</div><div>Não mandei o código inteiro. Somente a parte que está dando erro.</div><div><br></div><div>Segue abaixo o código todo:</div><div><br></div><div><div> mergesort=function(x){ # Função que irá quebrar a entrada ao meio cada vez que for acionada</div><div>        semisort=function(y,z){ #Função que vai juntando ordenadamente as partes da entrada</div><div>                resultado=NULL</div><div>                while(length(y)>0 & length(z)>0){ # Enquanto tiver elemento nos dois subvetores</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>                                resultado=c(resultado,y[1]) </div><div>                                y=y[-1] # Tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado</div><div>                        }</div><div>                        else{</div><div>                                resultado=c(resultado,z[1])</div><div>                                z=z[-1]</div><div>                        }</div><div>                }</div><div>                if(length(y)>0){ # A partir do momento que acaba os elementos em uma das metades, me resta "copiar" o que sobrou  da outra metade</div><div>                        resultado=c(resultado,y)</div><div>                }</div><div>                if(length(z)>0){</div><div>                        resultado=c(resultado,z)</div><div>                }</div><div>                return(resultado) # Retorna o resultado ordenado</div><div>        }</div><div>        tamanho=length(x) # 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>        if(tamanho>1){</div><div>                meio= tamanho/2</div><div>                esq=x[1:floor(meio)]</div><div>                dit=x[floor(meio+1):tamanho]</div><div>                esq=mergesort(esq)</div><div>                dit=mergesort(dit)</div><div>                if(esq[length(esq)]<=dit[1]){</div><div>                        return(c(esq,dit))</div><div>                }</div><div>                else{</div><div>                        semisort(esq,dit)</div><div>                }</div><div>        }</div><div>        else{ # Se a entrada for um unico elemento, a ordenação dela é trivial</div><div>                return(x)</div><div>        }</div><div>}</div></div><div><br></div><div>Att,</div><div>Jackeline.</div><div><br><br><div><div id="SkyDrivePlaceholder"></div>> 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>> 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 código mínimo reproduzível.<br></div></div>                                        </div></body>
</html>