
Verdade..Vou separar em duas funções e fazer as chamadas recursivas e ver se da certo!Ta muito parecido com o seu. A maior diferença é na resposta.A sua você criou um vetor do tamanho do vetor original e a partir que foram surgindo os menores valores você adotou i=1+i.Correto? Obrigada novamente!
From: beniltoncarvalho@gmail.com Date: Thu, 14 Mar 2013 13:12:49 -0300 To: r-br@listas.c3sl.ufpr.br Subject: Re: [R-br] "Ordenação Mergesort"
Pela "cara" do codigo, tudo o que vc precisa e' separar o codigo em duas funcoes... veja no que eu te mandei, que o mergesort chama ele proprio... e a ultima coisa e' fazer a ordenacao.
Em 14 de março de 2013 12:37, Jackeline Bonetti Campos <jackebcampos@hotmail.com> escreveu:
Olá Elias. É o merge sort.
Benilton Carvalho,obrigada! Vou olhar a sua implementação. Não mandei o código inteiro. Somente a parte que está dando erro.
Segue abaixo o código todo:
mergesort=function(x){ # Função que irá quebrar a entrada ao meio cada vez que for acionada semisort=function(y,z){ #Função que vai juntando ordenadamente as partes da entrada resultado=NULL while(length(y)>0 & length(z)>0){ # Enquanto tiver elemento nos dois subvetores if(y[1]<=z[1]){ # se o primeiro elemento do subvetor a esquerda for menor que o primeiro elemento do subvetor a direita resultado=c(resultado,y[1]) y=y[-1] # Tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado } else{ resultado=c(resultado,z[1]) z=z[-1] } } 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 resultado=c(resultado,y) } if(length(z)>0){ resultado=c(resultado,z) } return(resultado) # Retorna o resultado ordenado } 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 if(tamanho>1){ meio= tamanho/2 esq=x[1:floor(meio)] dit=x[floor(meio+1):tamanho] esq=mergesort(esq) dit=mergesort(dit) if(esq[length(esq)]<=dit[1]){ return(c(esq,dit)) } else{ semisort(esq,dit) } } else{ # Se a entrada for um unico elemento, a ordenação dela é trivial return(x) } }
Att, Jackeline.
From: eliaskrainski@yahoo.com.br To: r-br@listas.c3sl.ufpr.br Date: Thu, 14 Mar 2013 16:27:03 +0100 Subject: Re: [R-br] "Ordenação Mergesort"
Curiosidade: Esse algoritmo e' o quick sort?
_______________________________________________ R-br mailing list R-br@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.
_______________________________________________ R-br mailing list R-br@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.
R-br mailing list R-br@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.