Dados dois vetores ordenados de valores int A (de tamanho n ) e B (de tamanho m), escrever um programa que determina e mostra o vetor ordenado C que contém todos os elementos de AeB. Considerar que n>m.

Passo 1

O enunciado pede para juntar dois vetores ordenados de inteiros,
A de tamanho n e B de tamanho m, num único vetor ordenado C. O conteúdo aqui é o algoritmo de mesclagem (merge) de listas ordenadas e vamos precisar usar dois ponteiros (índices) para percorrer A e B simultaneamente.

Passo 2

Vamos inicializar três índices: i=1 para percorrer A, j=1 para percorrer B, e k=1 para preencher C. Também criamos C com tamanho n+m.
Enquanto i<= n e j<= m, comparamos A[i] e B[j]. Se A[i]<= B[j], atribuímos C[k]=A[i] e incrementamos i e k. Caso contrário, atribuímos C[k]=B[j] e incrementamos j e k.
Quando sair desse laço, um dos vetores já foi totalmente copiado. Então copiamos o que sobrou do outro vetor em C. Ou seja, enquanto i<= n, fazemos C[k]=A[i], incrementando i e k; e enquanto j<= m, fazemos C[k]=B[j], incrementando j e k.

Passo 3

Ao final, C estará totalmente preenchido e ordenado. Basta imprimir ou retornar o vetor C.

Resposta

Segue o pseudocódigo do programa de mesclagem:
// Entrada: A[1..n] e B[1..m], ambos ordenados, com n>m
i ← 1; j ← 1; k ← 1
alocar C[1..n+m]

// Mescla enquanto houver elementos em A e B
enquanto i ≤ n e j ≤ m faça
    se A[i] ≤ B[j] então
        C[k] ← A[i]
        i ← i + 1
    senão
        C[k] ← B[j]
        j ← j + 1
    fim se
    k ← k + 1
fim enquanto

// Copia o restante de A, se existir
enquanto i ≤ n faça
    C[k] ← A[i]
    i ← i + 1
    k ← k + 1
fim enquanto

// Copia o restante de B, se existir
enquanto j ≤ m faça
    C[k] ← B[j]
    j ← j + 1
    k ← k + 1
fim enquanto

// Saída: vetor C[1..n+m] ordenado

Exercícios relacionados