Ir para conteúdo

Pergunta

3 respostas a esta questão

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0

Boa noite, estou tentando fazer meu codigo no portugol Studio porem sempre da erro se voces puder olhar e me informar onde esta o erro agradeço embaixo esta meu codigo completo:

 

programa
{    
    //constante global
    const inteiro TMH = 8
    /*Divisão do merge
     * ele divide o inicio e o fim em 2
     * entao ele separa em (inicio,meio,valor) e
     * (meio+1,fim,valor) cada uma dessas sera dividida
     * ate sobrar menhum a sem dividido para ser organizado
     */
    funcao merge(inteiro valor[],inteiro inc, inteiro fim)
    {
        inteiro meio
        se(inc < fim)
        {
            meio =(inc + fim)/2

            merge(valor, inc, meio)
            merge(valor, meio+1, fim)
            mergeSort(valor, inc, meio, fim)
            
        }
    }

    //organização do mergeSort
    funcao mergeSort(inteiro valor[],inteiro inc, inteiro meio, inteiro fim)
    {
        inteiro n1,n2
        n1 = meio - inc + 1
        n2 = fim - meio

        inteiro l[]={n1+1}
        inteiro r[]={n2+1}

        para(inteiro i=1; i < n1; i++)
        {
            l = valor[inc + i -1]

            para(inteiro j=1; j < n2; j++)
            {
                r[j] = valor[meio + j]

                para(inteiro k=inc; k < fim; k++)
                {
                    se(l <= r[j])
                    {
                        valor[k] = l

                        i += 1
                    }
                    senao
                    {
                        valor[k] = r[j]

                        j += 1
                    }
                }
            }
        }
    }
    
    funcao inicio()
    {
        inteiro valor[TMH]
        inteiro inc
        inteiro fim
        //Declarar os valores a serem ordenados
        escreva("Digite ",TMH," valores \n")
        para(inteiro i=0; i < TMH; i++)
        {
            escreva(i+1,"º valor: ")
            leia(valor)
        }
        //declarando inicio, meio, fim 
        inc =0+((0 + TMH)/2)
        fim =((0 + TMH)/2) + TMH

        merge(valor,inc,fim)
    }
}

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por alexdyna
      Prezados,
      Amigos tenho que fazer um trabalho da faculdade onde o professor me da um arquivo que vou colocar anexo e tenho que fazer um algoritmo que leia o arquivo e monte uma tabela com as informações.
      pelo que vejo ele tem na primeira linha 8 barra e nas demais linha 10 barras
      ate a ultima que seria sua parada onde temos 2 barras seguidas.
       
      ficaria muito grato com a ajuda de todos.
       
      No arquivo anexo esta o texto:
      Nome/telefone/nascimento/Horas Curso/vendas T1/vendas T2/vendas T3/vendas T4/
       Luiz Ranza Neo/99934-5255/05/12/1989/200/107099,072578621/76915,8996218681/100922,271239691/76372,9971916498/
      Richard de Barrissaia/99326-4689/18/03/1990/150/55123,0080621828/68062,2200055909/67233,9928593779/45236,5928531083/
      Rodrigo Abalâminos/99911-7413/09/08/1987/168/71697,3866071191/58063,5644108225/88183,6230762134/48160,3116315664/
      José Gigfrid/99658-7874/15/04/1997/135/48816,199086596/50086,3689415844/52916,3066872779/55232,0663463164/
      Luiza Celly Silva/99659-1214/01/02/2000/90/29208,8223591438/39361,8088384592/45062,056112236/38913,7237126574/
      Maria Kunlun/99686-7845/21/04/1984/182/92076,1053757689/80440,5339844205/87575,0546657182/79220,9398178354/
      //
       
    • Por credson
      pessoal ola gostaria de criar um algoritimo que atraves da resposta de usuario que so podem digitar sim ou nao ....se chegasse a um determinado item da lista de um array
       
       
      por exemplo
       
      let lista =['trator','carro','bicicleta','Moto','trem','caminhao','onibus','paraquedas','balao','aviao','helicoptero','submarino','barco','navio','lancha'];   fazer varias perguntas onde as resposta seria sim ou nao e atraves disso chegase a resultado de algum item da array exemplo   tem rodas= sim e leve = sim tem pedal = sim reposta = bicicleta     outra situacao   voa= sim e leve= nao tem elise = sim   resposta elicoptero                           pq so que tem elise nesta lista e elicoptero     obg pela ajuda      
    • Por ALOISIO SANTOS
      Crie um algoritmo peça o Nome da pessoa, sexo e idade e classifique de acordo com a tabela abaixo:
       
       
      SEXO IDADE SALA Masc abaixo 18 Sala 1 Masc acima = 18 Sala 2 Fem abaixo 18 Sala 3 Fem acima = 18 Sala 4  
    • Por cerejafalante
      Olá pessoal, estou com uma lista de exercício de funções para fazer no visualg mas não sei por onde começar, alguém pode me ajudar fazendo esse exercício? ai eu pego ele de exemplo e faço os outros, obrigada
       
      o exercício é 
      Escreva um programa que calcula área de figuras: quadrado, retângulo, triângulo e círculo. O usuário informa qual forma deseja calcular a área, informa os parâmetros necessários e a área da forma é calculada em uma função. 
    • Por cerejafalante
      Pessoal tenho que fazer um algoritmo de função no visualg de uma calculadora. Eu fiz o algoritmo mas não sei como fazer função, alguém me ajudaaa
      o código está aqui, tem que por em função, obrigada
       
      Var
      n1,n2,r:real
      operacao:inteiro
      inicio
      repita
      escreval ("1. Multiplicação ")
      escreval ("2. Divisão ")
      escreval ("3. Subtração ")
      escreval ("4. Soma ")
      escreval ("5. Sair ")
      leia (operacao)
      se ( operacao = 5 ) entao
      fimalgoritmo
      fimse
      limpatela
      escreva ("Diga o primeiro numero: ")
      leia ( n1 )
      ate ( operacao >= 1 ) e ( operacao <= 5 )
      se ( operacao <= 4 ) e ( operacao >= 1 ) entao
      escreva ("Diga o segundo numero: ")
      leia (n2)
      fimse
      escolha operacao
      caso 1
      r <- n1*n2
      caso 2
      r <- n1/n2
      caso 3
      r <- n1-n2
      caso 4
      r <- n1+n2
      outrocaso
      escreva ("escolha incorreta")
      fimescolha
      escreval ("O resultado é: ", r)
      escreval ("")
      ate ( operacao = 5 )
      fimalgoritmo
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.