Pagini recente » Cod sursa (job #2970990) | Cod sursa (job #1209108) | Cod sursa (job #2318637) | Cod sursa (job #1250305) | Cod sursa (job #2534086)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int NMAX = 5e5 + 5;
int n, x[NMAX], b[NMAX];
void mergeSir(int st, int dr) {
int mij = (st + dr) / 2;
// sortat pe [st, mij] si [mij + 1, dr]; le mergez
int poz1 = st, poz2 = mij + 1;
int k = 0;
while (poz1 <= mij || poz2 <= dr) {
if (poz2 > dr || (x[poz1] <= x[poz2] && poz1 <= mij)) {
b[++k] = x[poz1];
poz1++;
}
else {
b[++k] = x[poz2];
poz2++;
}
}
for (int i = st; i <= dr; i++)
x[i] = b[i - st + 1];
}
void mergesort(int st, int dr) {
if (st == dr)
return;
int mij = (st + dr) / 2;
mergesort(st, mij);
mergesort(mij + 1, dr);
mergeSir(st, dr);
}
int main()
{
fi >> n;
for (int i = 1; i <= n; i++)
fi >> x[i];
mergesort(1, n);
for (int i = 1; i <= n; i++)
fo << x[i] << " ";
return 0;
}