Programação Imperativa

100 Questões Fichas Testes/Exames

Questão 27: merge

Voltar

Defina uma função void merge (int r [], int a[], int b [], int na, int nb) que, dados vetores ordenados a (com na elementos) e b (com nb elementos), preenche o vetor r (com na+nb elementos) com os elementos de a e b ordenados.

Exemplo

> int a[4] = {2, 4, 6, 8};
> int b[4] = {1, 3, 5, 7};
> int r[8];
> merge(r, a, b, 4, 4);
> r
(int [8]) {1, 2, 3, 4, 5, 6, 7, 8}

Resolução

void merge (int r [], int a[], int b[], int na, int nb) {
    int i = 0, j = 0;
    while (i + j < na + nb) {
        if(j == nb || a[i] < b[j]) {
            r[i+j] = a[i];
            i++;
        }
        else {
            r[i+j] = b[j];
            j++;
        }
    }
}