Pagini recente » Cod sursa (job #544046) | Monitorul de evaluare | Istoria paginii utilizator/adasoare | Monitorul de evaluare | Cod sursa (job #1529076)
#include<iostream>
#include<fstream>
using namespace std;
void interclas(int a, int m, int b, int* v, int* o, int* aux) {
int i, j, k;
i = k = a;
j = m + 1;
while (i <= m && j <= b) {
if (v[o[i]] <= v[o[j]])
aux[k++] = o[i++];
else
aux[k++] = o[j++];
}
while (i <= m)
aux[k++] = o[i++];
while (j <= b)
aux[k++] = o[j++];
for (k = a; k <= b; k++)
o[k] = aux[k];
}
void merge(int a, int b, int* v, int* o, int* aux) {
if (a == b)
return;
int m = (a + b) / 2;
merge(a, m, v, o, aux);
merge(m + 1, b, v, o, aux);
interclas(a, m, b, v, o, aux);
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N;
fin >> N;
int v[N], o[N], aux[N];
for (int i = 0; i < N; i++) {
fin >> v[i];
o[i] = i;
}
merge(0, N - 1, v, o, aux);
for (int i = 0; i < N; i++)
fout << v[o[i]] << " ";
return 0;
}