Pagini recente » Cod sursa (job #2884234) | Cod sursa (job #235650) | Cod sursa (job #832473) | Cod sursa (job #664023) | Cod sursa (job #1525105)
#include <cstdio>
#define nmax 500001
FILE *fin = fopen("algsort.in", "r");
FILE *fout = fopen("algsort.out", "w");
using namespace std;
int n, v[nmax], aux[nmax];
void citire()
{
fscanf(fin, "%d", &n);
for(int i = 1; i <= n; i++)
fscanf(fin, "%d", &v[i]);
}
void interclasare(int st, int m, int dr)
{
int x = st, y = m+1, k = 1;
while(x <= m && y <= dr)
{
if(v[x] <= v[y])
aux[k++] = v[x++];
else
aux[k++] = v[y++];
}
while(x <= m)
aux[k++] = v[x++];
while(y <= dr)
aux[k++] = v[y++];
int t = st;
for(k = 1; k <= dr-st+1; k++)
v[t++] = aux[k];
}
void mergesort(int st, int dr)
{
if(st < dr)
{
int m = (st+dr)/2;
mergesort(st, m);
mergesort(m+1, dr);
interclasare(st, m, dr);
}
}
void afisare()
{
for(int i = 1; i <= n; i++)
fprintf(fout, "%d ", v[i]);
}
int main()
{
citire();
mergesort(1, n);
afisare();
return 0;
}