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 Carolm
      Boa Noite, tenho que solucionar um exercício de PL/SQL ,onde devo encontrar um algorítimo/código para poder analisar um CNPJ ,que sera informado pelo usuário,o SQL Developer deve realizar o cálculo para pegar os dígitos validadores desse CNPJ, e por fim analisar se ele é válido ou inválido e no console apresentar o texto : Valido ou inválido dependendo do resultado obtido com o calculo!
      Nesse exercício sera aberta uma "tela" que vai pedir pro usuário digitar o numero do CNPJ,esse CNPJ sera capturado e analisado através de um calculo de validação de CNPJ (ira analisar os dígitos verificadores) e com o resultado ele ira informar ao usuário se o numero é VALIDO ou INVALIDO!
      Enunciado :
      CRIE UM BLOCO ANÔNIMO PL/SQL  ORACLE  QUE IRÁ SOLICITAR PARA O USUÁRIO O NÚMERO DO: CNPJ - BLOCO ANÔNIMO-DÍGITO VERIFICADOR

      Eu rodei o código abaixo  o SQL informou que a função foi compilada,porém não aparece a mensagem dizendo se o numero informado é válido ou inválido...Será que poderiam me ajudar ?
      set serveroutput on ACCEPT CNPJ PROMPT 'Digite o numero do CNPJ' CREATE OR REPLACE FUNCTION CNPJ (p_cgc IN CHAR) RETURN BOOLEAN IS m_total NUMBER := 0; m_digito NUMBER := 0; BEGIN FOR i IN 1..4 LOOP m_total := m_total + substr(p_cgc,i,1) * (6 - i); END LOOP; FOR i IN 5..12 LOOP m_total := m_total + substr(p_cgc,i,1) * (14 - i); END LOOP; m_digito := 11 - mod(m_total,11); IF m_digito > 9 THEN m_digito := 0; END IF; IF m_digito != substr(p_cgc,13,1) THEN RETURN FALSE; END IF; m_digito := 0; m_total := 0; FOR i IN 1..5 LOOP m_total := m_total + substr(p_cgc,i,1) * (7 - i); END LOOP; FOR i IN 6..13 LOOP m_total := m_total + substr(p_cgc,i,1) * (15 - i); END LOOP; m_digito := 11 - mod(m_total,11); IF m_digito > 9 THEN m_digito := 0; END IF; IF m_digito != substr(p_cgc,14,1) THEN RETURN FALSE; END IF; RETURN TRUE; IF CNPJ(14) = TRUE THEN DBMS_OUTPUT.PUT_LINE('VERDADEIRO'); ELSE DBMS_OUTPUT.PUT_LINE('FALSO'); END IF; END; /  

    • By Fernando Cavaccini
      Boa noite pessoal, estou criando um algoritmo no Visualg, que é para um usuário que está construindo uma casa, porém em uma parte, é necessário dividir a área interna da casa em partes iguais, mas não sei como posso fazer isso, se alguém pudesse dar uma dica. Obrigado desde já.
    • By Amanda Sprouse
      Olá, sou nova na programação e ainda estou trabalhando só com o visualg. Então relevem qualquer coisa, por favor.
       
      Bom... Meu professor pediu para fazermos um programa no visualg que escrevesse de 0 até 100 por extenso.
       
      Tem algumas restrições só podemos usar:
      Se; fimse;
      Escreva; leia;
      <-
       
      •Não pode usar vetores e isso complicou muito.
      •Não pode ser (todo) assim: se (numero=45) enato
      escreva("Quarenta e cinco"), porque isso ia gastar muitas linhas. 
       
      Ele deu uma dica de como fazer: 
       
      Var:
      Unidaden: inteiro
      Unidadec: caractere
      Dezena: caractere
      Numero: inteiro
      Inicio:
      escreva ("Digite um número e tecle enter: )
      leia (numero)
      Se (numero>20) e (numero<30) entao
      escreva ("Vinte e ", ???)
       
       
    • By Luan cinco
      Olá, gostaria que vocês pudessem me ajudar a desenvolver e com resolução esses exercícios aqui,  estou quebrando a cabeça e não consigo chegar em nadaaa, obrigado!!! 
       
      Primeiro exercício 
       
      1-Leia um valor inteiro entre 1000 e 9999 e verifique se o número formado apenas pelos algarismos que estão nas casas das unidades de milhar e das centenas é ou não múltiplo de 4.
       
      Segundo " "
       
      2- Numa loja de eletrodomésticos, o vendedor encarregado da seção de televisores recebe, mensalmente, um salário fixo mais comissão. Esta comissão é calculada em relação ao tipo e a quantidade de televisores vendidos por mês, obedecendo a seguinte tabela: Sobre o seu salário fixo há um desconto de 10% referente ao INSS. Caso o seu salário bruto exceda a R$ 1500,00 haverá desconto de imposto de renda, conforme a segunda a tabela ao lado, aplicada sobre o valor excedente a R$ 1500,00.  Calcule: a comissão do funcionário, o salário bruto, os valores de cada desconto, o total dos descontos e o salário líquido.
       

       
      Terceiro  " "
       
      Escreva um algoritmo que leia o valor de 3 ângulos de um triângulo e escreva se o triângulo é retângulo, obtusângulo ou acutângulo. A saber, o triângulo retângulo possui um ângulo reto, o triângulo obtusângulo possui um ângulo obtuso, e o triângulo acutângulo possui 3 ângulos agudos.
       
      Quarto 
       
      No Campeonato Mundial de Cross Fit o atleta deve pesar entre 65 Kg (inclusive) e 100 Kg (inclusive) e medir de 1,70 m (inclusive) a 1,95 m (inclusive). Escrever um algoritmo para ler a altura e o peso de um jogador e determinar se o jogador está apto a participar do campeonato, escrevendo a mensagem correta, conforme a situação:
      • ACEITO (se a altura e o peso do jogador estiverem dentro da faixa especificada)
      • TOTALMENTE RECUSADO (se a altura e o peso do jogador forem inválidos)
      • RECUSADO POR ALTURA (se somente a altura do jogador for inválida) • RECUSADO POR PESO (se somente o peso do jogador for inválido)
    • By jinxx
      Gente alguém pode me da uma luz nesse algoritmo? como eu resolvo isso pelo menos? Tentei utilizar o comando arquivo <> no visualg, mas não da certo. 
       
      Você decidiu comprar um carro e para ajudar na sua decisão, você resolveu desenvolver um código que mostre ao final qual é o menor custo ao final de ano para cada modelo escolhido baseado no custo total de compra do carro, custo com impostos, custo com combustível (considerando o consumo médio de cada veículo e um total estimado de 10.000 Km rodados no ano e o valor de médio R$ 3,98 para o litro de combustível) e custos com seguro.
      Como dados de entrada você pode criar um arquivo que contenha as seguintes informações que serão carregadas no programa.
      Modelo do veículo
      Custo total de compra
      Custo total de impostos
      Consumo médio de combustível (Km/l)
      Custos com seguro
      Chevrolet Ônix
      R$36.000,00
      R$1.400,00
      11,8
      R$1.600,00
      Ford Fiesta
      R$32.000,00
      R$1.300,00
      13,5
      R$1.800,00
      VW Fox
      R$31.000,00
      R$1.450,00
      12,3
      R$1.300,00
      VW Polo
      R$41.000,00
      R$1.600,00
      13,5
      R$1.500,00
      Hyundai HB20
      R$40.000,00
      R$1.200,00
      11,6
      R$1.200,00
      Renault Sandero
      R$30.000,00
      R$1.300,00
      12,8
      R$1.900,00
      Ao final o programa deverá mostrar os dados apresentados na tabela para cada veículo e o custo total no final de um ano para cada um deles.
×

Important Information

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