[R-br] "Ordenação Mergesort"

Jackeline Bonetti Campos jackebcampos em hotmail.com
Quinta Março 14 12:37:49 BRT 2013


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 em yahoo.com.br
> To: r-br em 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 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.
 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130314/d810c7b5/attachment.html>


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