Sortarea a doi vector prin interclasare are ca rezultat un vector sortat crescator, ce contine elementele din ambii vectori.
Exemplu:
N = 5
A[1] = 1, A[2] = 3, A[3] = 5, A[4] = 7, A[5] = 9
M = 4
B[1] = 2, B[2] = 4, B[3] = 6, B[4] = 8
Rezultatul este vectorul C cu K = N + M = 9 elemente (A[1], B[1], A[2], B[2], A[3], B[3], A[4], B[4], A[5])
Sortarea prin interclasare, varianta clasica
O mica explicatie a algoritmului: Se pleaca de la primii doi termeni din cei doi vectori A si B, iar la fiecare pas, alegem mereu elementul cu valoare mai mica, dupa care trecem la urmatorul termen din sirul curent.
Daca A < B[j], alegem A si i++;
Daca A > B[j], alegem B[j] si j++;
#include <iostream>
using namespace std;
int N, M, A[100], B[100], C[200];
void Read();
void Interclasare();
void Print();
int main() {
Read();
Interclasare();
Print();
return 0;
}
void Read() {
cout << "Atentie ! Vectorii A si B trebuie sa fie deja sortati crescator !\n";
cout << "N = ";cin >> N;
for(int i = 1; i <= N; ++i) {
cout << "A[" << i << "] = ";cin >> A[i];
}
cout << "M = ";cin >> M;
for(int i = 1; i <= M; ++i) {
cout << "B[" << i << "] = ";cin >> B[i];
}
}
void Interclasare() {
int x = 1, y = 1;
while(x <= N || y <= M) {
if(x <= N && y <= M) {
if(A[x] < B[y]) {
C[++C[0]] = A[x];
++x;
}
else {
C[++C[0]] = B[y];
++y;
}
}
else {
if(x <= N) {
C[++C[0]] = A[x];
++x;
}
else {
C[++C[0]] = B[y];
++y;
}
}
}
}
void Print() {
cout << "C: ";
for(int i = 1; i <= C[0]; ++i) {
cout << C[i] << ' ';
}
cout << '\n';
}
Pentru intrebari, sugestii, neclaritati, lasati un reply in acest topic.