Pagini recente » Cod sursa (job #2468376) | Cod sursa (job #1722332) | Cod sursa (job #9465) | Cod sursa (job #2309924) | Cod sursa (job #2025642)
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMAX 500001
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int p[NMAX], n;
int aux[NMAX], nr = 0;
void Merge(int x1, int y1, int x2, int y2) {
int i = x1, j = x2;
nr = 0;
while (i <= y1 && j <= y2) {
if (p[i] < p[j])
aux[++nr] = p[i++];
else
if (p[i] > p[j])
aux[++nr] = p[j++];
else {
aux[++nr] = p[i++];
aux[++nr] = p[j++];
}
}
while (i <= y1)
aux[++nr] = p[i++];
while (j <= y2)
aux[++nr] = p[j++];
}
void MergeSort(int x, int y) {
if (x != y) {
int m = x + (y - x) / 2;
MergeSort(x, m);
MergeSort(m + 1, y);
Merge(x, m, m + 1, y);
for (int i = x; i <= y; i++)
p[i] = aux[i - x + 1];
}
}
int main() {
in >> n;
for (int i = 1; i <= n; i++)
in >> p[i];
MergeSort(1, n);
for (int i = 1; i <= n; i++)
out << p[i] << " ";
in.close();
out.close();
return 0;
}