Pagini recente » Cod sursa (job #2731406) | Cod sursa (job #541578) | Cod sursa (job #1802278) | Cod sursa (job #2663700) | Cod sursa (job #2254173)
#include <stdio.h>
#include <limits.h>
#include <float.h>
#define maxN 500000
int aux[maxN];
void mergeSort(int *v, int left, int right)
{
int m = (left + right) >> 1, i, j, k;
if(left == right)
return ;
mergeSort(v, left, m);
mergeSort(v, m + 1, right);
for(i = left, j = m + 1, k = left; i <= m || j <= right; )
{
if(j > right || (v[i] < v[j] && i <= m))
{
aux[k++] = v[i++];
}
else
{
aux[k++] = v[j++];
}
}
for(k = left; k <= right; ++k)
v[k] = aux[k];
}
int main()
{
FILE *f_in, *f_out;
f_in = fopen("algsort.in", "r");
f_out = fopen("algsort.out", "w");
int n, v[maxN];
fscanf(f_in, "%d", &n);
for(int i = 0; i < n; ++i)
{
fscanf(f_in, "%d", &v[i]);
}
mergeSort(v, 0, n - 1);
for(int i = 0; i < n; ++i)
{
fprintf(f_out, "%d ", v[i]);
}
}