Jump to content

Question

2 answers to this question

Recommended Posts

  • 0

Olá Rafa tudo bem ?

 

Que linguagem estás a utilizar ??

 

Se for c ou numa das suas derivantes para fazeres merge sort não recursivo segue o seguinte código 

float a[50000000],b[50000000];

void mergesort (long num)
{
    int rght, wid, rend;
    int i,j,m,t;

    for (int k=1; k < num; k *= 2 ) {       
        for (int left=0; left+k < num; left += k*2 ) {
            rght = left + k;        
            rend = rght + k;
            if (rend > num) rend = num; 
            m = left; i = left; j = rght; 
            while (i < rght && j < rend) { 
                if (a[i] <= a[j]) {         
                    b[m] = a[i]; i++;
                } else {
                    b[m] = a[j]; j++;
                }
                m++;
            }
            while (i < rght) { 
                b[m]=a[i]; 
                i++; m++;
            }
            while (j < rend) { 
                b[m]=a[j]; 
                j++; m++;
            }
            for (m=left; m < rend; m++) { 
                a[m] = b[m]; 
            }
        }
    }
}

O tipo de intercalação não recursiva funciona considerando os tamanhos de janela de 1,2,4,8,16 ... 2 ^ n sobre a matriz de entrada. Para cada janela ('k'), todos os pares adjacentes de janelas são misturados num espaço temporário e, em seguida, colocados de volta na matriz.

 Entrada e saída estão em 'a'.

Armazenamento temporário em 'b'.

 

Caso não seja a linguagem c que estas a utilizar nem nenhuma das suas derivantes, se for java por exemplo podes sempre adaptar basta mudar a sintaxe de algumas instruções ... 

 

Espero que tenha ajudado

 

Abraço 

 

Vítor Mendes

 

 

 

 

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luadiego
      algoritmo "ESCOLHA DE NUMEROS PARES OU IMPARES UNSANDO A ESTRUTURA DE CONDICIONAMENTO ESCOLHA COM A ESTRUTURA DE REPETIÇÃO PARA"
      var
         V,MUN,VALORES:INTEIRO
      inicio
          ESCREVA("DIGITE O NUMERO DESEJADO :")
          LEIA(V)
          escreval("----------------------------")
          escreval("  [1] PARA PAR              ")
          escreval("  [2} para IMPAR            ")
          ESCREVAL("----------------------------")
          ESCREVAL("ESCOLHA UM DOS VALORES")
          LEIA(VALORES)
          ESCOLHA(VALORES)
          caso 1
          PARA MUN <- 0 ATE V FACA
           SE (MUN MOD 2 =0) ENTAO
            escreval(MUN)
           FIMSE
          MUN <- MUN +1
          FIMPARA
           caso 2
         PARA MUN <- 0 ATE V FACA
           SE (MUN MOD 2 =1) ENTAO
            escreval(MUN)
           FIMSE
          MUN <- MUN +1
          FIMPARA
         FIMESCOLHA
      fimalgoritmo
    • By luizcmoficial
      escreval("CPF COMPLETO: ",vet[1],vet[2],vet[3]," .",vet[4],vet[5],vet[6]," .",vet[7],vet[8],vet[9]," -",digitoum,digitodois)

      Gostaria de deixar os números um do lado do outro, porém sem esse espaçamento.
      Os números sempre ficam todos meio separados, desta maneira: 3 2 1 . 1 4 3 . 1 2 2 - 5 9
      Não conheço nenhum comando que consiga fazer isso, ou nem sei se existe algum jeito. 
    • By luizrufino
      Boa tarde pessoal, estou com dificuldade para 
      desenvolver as linhas de códigos de um problema.
       
      Escreva um algoritmo em potrugol que leia o NOME do responsável e o número de filhos matriculados em uma escolinha de futebol. com mensalidade de $120,00, imprimir o valor que o responsável vai pagar, baseando-se na seguinte tabele de descontos
       
      filhos matriculados        Desconto
       1                                             10%
       2 a 3                                       15%
      acima de  3                             20
       
      Se alguém puder me ajudar, pode ser somente a estrutura básica.
    • By pedrof
      algoritmo "Bhaskara" var a, b, c, delta, raiz_delta, x1, x, x_delta, x2: Real inicio Escreva("Informe um numero inteiro diferente de 0: ") Leia(a) Escreva("Informe outro numero inteiro diferente de 0: ") Leia(b) Escreva("Novamente, informe outro numero inteiro diferente de 0: ") Leia(c) delta <- (b^2-4*a*c) Se (delta<0) entao delta <- Abs(delta) raiz_delta <- (RaizQ(delta)) x <- (b-b*2)/(2*a) x_delta <- raiz_delta/(2*a) x1 <- (x, "+", x_delta, "i") x2 <- (x, "-", x_delta, "i") Escreval("Utilizando ", a, " como 'a', ", b, " como 'b', ", c, " como 'c' em Delta e aplicando a ") Escreval("Formula de Bhaskara, chegamos ao resultado:) Escreva("x1 = ", x1, " e x2 ", x2) FimSe fimalgoritmo

      Parece ser algo bem idiota, mas não estou conseguindo resolver... Ajuda?
    • By Montesuma Oliveira
      Olá aos mestres do algoritmo com VisuAlg, tenho o seguinte algoritmo:
       
      algoritmo "Estrutura Indexadas - Vetor(Array)" // Seção de Declarações var indice, qtd_Veiculos, tot_Veiculos : inteiro nome_veiculo: vetor [1..40] de caractere inicio // Seção de Comandos escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ") leia(qtd_Veiculos) enquanto qtd_Veiculos <> -1 faca    para indice de 1 ate qtd_Veiculos faca       escreva("Digite o Nome do Veículo: ")       leia(nome_veiculo[indice])    fimpara    tot_Veiculos <- 0    tot_Veiculos <- (tot_Veiculos + (indice + 1))    escreval("Digite a Quantidade de Veículos para Cadastrar ou -1 Para Sair: ")    leia(qtd_Veiculos) fimenquanto para indice de 1 ate tot_Veiculos faca    escreval("O Veículo ", nome_veiculo[indice], " tem o índice ", indice) fimpara fimalgoritmo Estou usando vetor, o que acontece é o seguinte, por exemplo, digite dois veículos, quando ele retorna perguntando se quero encerrar, eu digo que quero incluir mais dois veículos, ao digitar -1 para sair, ele imprime somente os dois últimos veículos cadastrados e não 4 veículos, que deveria ser o correto, conforme figura anexa. Onde estou errando? Fico no aguardo de ajuda, muito grato.
       
       
       
       
       
       
       
       
       
       
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.