Interclasarea a doi vectori
Considerăm două tablouri unidimensionale cu elemente numere întregi ordonate crescător. Se dorește construirea unui alt tablou, care să conțină valorile din cele două tablouri, în ordine.
O soluție foarte eficientă este interclasarea:
- considerăm două tablouri, cu n, respectiv m elemente, ordonate crescător
- cele două tablouri se parcurg concomitent;
- se alege valoarea mai mică dintre cele două elemente curente
- se adaugă în al treilea tablou
- se avansează numai în tabloul din care am ales valoarea de adăugat
- parcurgerea unuia dintre cele două tablouri se încheie
- toate elementele din celălalt tablou, neparcurse încă, sunt adăugate în tabloul destinație
- tabloul destinație are p = n + m elemente
i = 1;
j = 1;
while(i <= n && j <= m)
{ //Comparăm elementele a[i] și b[j] din vector
//Luăm mereu elementul mai mic
if(a[i] < b[j])
{
k++;
c[k] = a[i];
i++;
}
else
{
k++;
c[k] = b[j];
j++;
}
}
while(i <= n)
{ //Dacă intrăm în acest while, atunci vectorul b s-a epuizat, dar au rămas elemente în vectorul a, pe care le adăugăm pe rând ca mai sus
k++;
c[k] = a[i];
i++;
}
while(j <= m)
{ //Dacă intrăm în acest while, atunci vectorul a s-a epuizat, dar au rămas elemente în vectorul b, pe care le adăugăm pe rând ca mai sus
k++;
c[k] = b[j];
j++;
}