Pagini recente » Rating Marcu Alexandru (AlexMarcu) | Cod sursa (job #824114) | Cod sursa (job #1984975) | Istoria paginii runda/123123/clasament | Cod sursa (job #2401779)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int main()
{
int n, n2, *v, *u, *aux;
fin >> n;
n2 = n << 1;
v = new int[n];
u = new int[n];
for (int i = 0; i < n; ++i) {
fin >> v[i];
}
for (int i = 2; i < n2; i <<= 1) {
for (int j = 0; j < n; j += i) {
int sx = j + (i >> 1), sy = j + i;
if (sx > n) {
sx = n;
}
if (sy > n) {
sy = n;
}
for (int k = j, x = j, y = sx; k < sy; ) {
if (x >= sx) {
u[k++] = v[y++];
}
else if (y >= sy) {
u[k++] = v[x++];
}
else if (v[x] > v[y]) {
u[k++] = v[y++];
}
else {
u[k++] = v[x++];
}
}
}
aux = v;
v = u;
u = aux;
}
for (int i = 0; i < n; ++i) {
fout << v[i] << " ";
}
}