Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Bellator

Merge Sort

Recommended Posts

Estou tentando implementar o Merge Sorte (Ordenação por intercalação) no pascal, mas não tive muito sucesso, em algumas situações ele da certo, em outras não, por exemplo: seu eu entro com 12 - 3 - 5 - 1 - 8 e 11, o programa ordena, mas se eu digitar por exemplo 12 - 3 - 5 - 1 - 8 - 11 - 15 - 28, dá erro.

A implementação é a seguinte (Sei que é meio complicado, mas se tiver uma alma caridosa que possa me ajudar, eu agradeço) :

program mergesort;

uses crt;

const max=50;

type vetori = array[1..max] of integer;

procedure intercala(var v:vetori; ini, meio, fim:integer);

var a:vetori;

i, j, k, res:integer;

begin

i:=ini; res:=ini; j:=meio+1;

while (i<=meio) and (j<=fim) do

begin

if v<=v[j] then

begin

a[res]:=v;

inc(i);

end

else

begin

a[res]:=v[j];

inc(j);

end;

inc(res);

end;

if (i>meio) then

begin

for k:=j to meio do

begin

a[res]:=v[k];

inc(res);

end;

end

else

begin

for k:=i to meio do

begin

a[res]:=v[k];

inc(res);

end;

for k:=ini to fim do

begin

v[k]:=a[k];

end;

end;

end;

procedure merge_sort(var v:vetori; ini, fim:integer);

var meio:integer;

begin

if ini<>fim then

begin

meio:=(ini+fim) div 2;

merge_sort(v,ini,meio);

merge_sort(v,meio+1,fim);

intercala(v,ini,meio,fim);

end;

end;

var n,i,ini,meio, fim:integer;

v:vetori;

Begin

clrscr;

writeln('Entre com o numero de elementos do vetor: ');

readln(n);

ini:=1;fim:=n;

for i:=1 to n do

begin

writeln('Vetor [',i,']: ');

readln(v);

end;

merge_sort(v,ini,fim);

for i:=1 to n do

writeln('Vetor [',i,']: ',v);

readkey;

End.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci um detalhe, o programa estava originalmente em C++, como segue:

Implementação em C

Void merge (int M[5o], int inicio, int fim)

{

int meio;

comparações[3]++;

if (inicio < fim)

{

meio = ((inicio + fim)/2);

merge (M, inicio, meio);

merge (M, meio+1, fim);

intercala (M, inicio, meio, fim);

}

}

void intercala (int M[50], int inicio, int fim)

{

int primeiro, res, segundo, k;

int C[]50;

primeiro = res = inicio;

segundo = meio + 1;

while (primeiro <= meio && segundo <= fim)

{

comparacoes[3]++;

if (M[primeiro] <= M[segundo])

{

atribuicoes [3]++;

C[res]= M[primeiro];

primeiro++;

}

else

{

atribuicoes[3]++;

C[res] = M[segundo];

segundo++;

}

res++;

}

comparacoes[3]++;

if (primeiro > meio)

for (k=segundo; k<=meio; k++)

{

atribuicoes[3]++;

C[res] = M[k];

res++;

}

else

for (k=primeiro; k<=meio; k++)

{

atribuicoes[3]++;

C[res] = M[k];

res++;

}

for (k=inicio; k<=fim; k++)

M[k] = C[k];

}

http://w3.ualg.pt/~hshah/ped/Aula%2014/merge_final.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×