Pagini recente » Cod sursa (job #756107) | Cod sursa (job #2691119) | Cod sursa (job #2398558) | Cod sursa (job #2175690) | Cod sursa (job #938403)
Cod sursa(job #938403)
#include <fstream>
#include <cstring>
#define MAX_N 500004
using namespace std;
const char iname[] = "algsort.in";
const char oname[] = "algsort.out";
ifstream fin(iname);
ofstream fout(oname);
int N, i, j, aux;
int a[MAX_N], c[MAX_N];
inline void merge (int a[MAX_N], int l, int r)
{
int m = (l + r) / 2, ind = 0;
for (i = l, j = m + 1; i <= m && j <= r;)
{
if (a[i] < a[j])
c[++ind] = a[i], ++i;
else
{
if (a[i] == a[j])
c[++ind] = a[i], c[++ind] = a[j], ++i, ++j;
else
c[++ind] = a[j], ++j;
}
}
for (; i <= m; ++i) c[++ind] = a[i];
for (; j <= r; ++j) c[++ind] = a[j];
for (i = l, j = 1; j <= ind; ++i, ++j)
a[i] = c[j];
}
void merge_sort (int left, int right)
{
if (left == right) return;
int m = (left + right) / 2;
merge_sort(left, m); merge_sort(m + 1, right);
merge(a, left, right);
}
int main()
{
fin >> N;
for (i = 1; i <= N; ++i) fin >> a[i];
merge_sort(1, N);
for (i = 1; i <= N; ++i)
fout << a[i] << ' ';
return 0;
}