Clasa a IX-a · Sortare și căutareRead in English
Interclasarea a doi vectori sortați în C++
În engleză: Merging two sorted arrays
Ideea
Din doi vectori sortați crescător construim un al treilea, tot sortat. Comparăm elementele curente a[i] și b[j], îl copiem pe cel mai mic și avansăm doar în vectorul din care l-am luat. Când un vector se termină, copiem ce a rămas din celălalt.
Descrierea în engleză
From two arrays sorted in increasing order we build a third, also sorted. We compare the current elements a[i] and b[j], copy the smaller one and advance only in the array we took it from. When one array runs out, we copy what is left of the other.
- Complexitate
- O(n + m)
- Clasa
- Clasa a IX-a (Grade 9)
- Capitol
- Sortare și căutare
Exemple
Intrare
4 1 4 6 9 3 2 4 10
Ieșire așteptată
1 2 4 4 6 9 10
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Interclasarea a doi vectori sortați
* Clasa: 9
* Capitol: Sortare și căutare
* Descriere: Din doi vectori sortați crescător construim un al treilea, tot
* sortat. Comparăm elementele curente a[i] și b[j], îl copiem pe cel
* mai mic și avansăm doar în vectorul din care l-am luat. Când un
* vector se termină, copiem ce a rămas din celălalt.
* Complexitate: O(n + m)
*
* Exemplu
* Intrare:
* 4
* 1 4 6 9
* 3
* 2 4 10
* Ieșire: 1 2 4 4 6 9 10
*/
#include <iostream>
using namespace std;
int a[1001], b[1001], c[2001];
int main()
{
int n, m;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
cin >> m;
for (int j = 1; j <= m; j++)
{
cin >> b[j];
}
int i = 1, j = 1, k = 0;
while (i <= n && j <= m)
{
if (a[i] <= b[j])
{
k++;
c[k] = a[i];
i++;
}
else
{
k++;
c[k] = b[j];
j++;
}
}
while (i <= n)
{
k++;
c[k] = a[i];
i++;
}
while (j <= m)
{
k++;
c[k] = b[j];
j++;
}
for (int p = 1; p <= k; p++)
{
cout << c[p] << ' ';
}
cout << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.