Pagini recente » Cod sursa (job #1806006) | Cod sursa (job #1579992) | Cod sursa (job #972889) | Cod sursa (job #2808009) | Cod sursa (job #2476754)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = (int)1e5 + 5;
int a[NMAX], b[NMAX];
void Interclasare(int v[], int na, int nb, int k) {
int i = 1, j = 1;
while (i <= na || j <= nb) {
if (i > na) {
++k;
v[k] = b[j];
++j;
} else if (j > nb) {
++k;
v[k] = a[i];
++i;
} else if (a[i] < b[j]) {
++k;
v[k] = a[i];
++i;
} else {
++k;
v[k] = b[j];
++j;
}
}
}
void Sortare(int v[], int n, int st, int dr) {
// problema: sorteaza v
if (n == 1)
return;
int mij = (st + dr) / 2;
Sortare(v, mij - st + 1, st, mij); // apelez recursiv pt a sorta jumatatea stanga
Sortare(v, dr - mij, mij + 1, dr); // apelez recursiv pt a sorta jumatatea dreapta
// problema: v e sortat de la st la mij
// v e sortat de la mij + 1 dr
// st -> mij va fi sortat
// mij + 1 -> dr va fi sortat
// interclasez vectorii a si b care reprezinta cele 2 jumatati
int na = 0, nb = 0;
for (int i = st; i <= mij; ++i) {
++na;
a[na] = v[i];
}
for (int i = mij + 1; i <= dr; ++i) {
++nb;
b[nb] = v[i];
}
Interclasare(v, na, nb, st - 1);
}
int v[NMAX];
int main() {
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n; cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
}
Sortare(v, n, 1, n);
for (int i = 1; i <= n; ++i) {
cout << v[i] << ' ';
}
cout << endl;
}