Pagini recente » Cod sursa (job #939649) | Cod sursa (job #1964120) | Cod sursa (job #499425) | Cod sursa (job #626261) | Cod sursa (job #1785546)
/* Sortare folosita: MergeSort */
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define Nmax 500002
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[Nmax], Aux[Nmax];
void Merge(int st1, int dr1, int st2, int dr2) {
int p = 0, x = st1, y = st2;
while (x <= dr1 && y <= dr2) {
if (v[x] < v[y]) {
Aux[++p] = v[x];
x++;
}
else {
Aux[++p] = v[y];
y++;
}
}
while (x <= dr1) {
Aux[++p] = v[x];
x++;
}
while (y <= dr2) {
Aux[++p] = v[y];
y++;
}
for (int i = st1, j = 1; i <= dr2; ++i, ++j)
v[i] = Aux[j];
}
void MergeSort(int st, int dr) {
if (st >= dr)
return;
int mid = (st + dr) >> 1;
MergeSort(st, mid);
MergeSort(mid + 1, dr);
Merge(st, mid, mid + 1, dr);
};
int main() {
int N;
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> v[i];
MergeSort(1, N);
for (int i = 1; i <= N; ++i)
fout << v[i] << " ";
return 0;
}