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++;
}
}
}