Pagini recente » Cod sursa (job #1822524) | Cod sursa (job #2201587) | Cod sursa (job #1826775) | Cod sursa (job #1717897) | Cod sursa (job #1253891)
#include "stdio.h"
FILE *f, *g;
int n;
int a[500001];
int* merge(int* l1, int size1, int* l2, int size2)
{
int* c = new int[size1+size2+1];
int i = 1;
int j = 1;
int k = 1;
while(i <= size1 && j <= size2)
{
if(l1[i] > l2[j])
{
c[k++] = l2[j];
j++;
}
else
{
c[k++] = l1[i];
i++;
}
}
for(int i1 = i; i1 <= size1; i1++)
c[k++] = l1[i++];
for(int j1 = j; j1 <= size2; j1++)
c[k++] = l2[j++];
return c;
}
int* merge_sort(int* a, int x, int y)
{
if(x == y)
{
int* c = new int[2];
c[1] = a[x];
return c;
}
else if(y-x > 0)
{
int* l1 = merge_sort(a, x, (x+y) / 2);
int* l2 = merge_sort(a, (x+y) / 2 + 1, y);
int size1 = 0;
int size2 = 0;
if((x+y)/2 >= x)
size1 = (x+y)/2 - x + 1;
if(y >= (x+y)/2+1)
size2 = y - (x+y)/2;
int* l = merge(l1, size1, l2, size2);
return l;
}
}
int main()
{
f = fopen("algsort.in", "r");
g = fopen("algsort.out", "w");
fscanf(f, "%d", &n);
for(int i = 1; i <= n; i++)
fscanf(f, "%d", &a[i]);
int* r = merge_sort(a, 1, n);
for(int i = 1; i <= n; i++)
fprintf(g, "%d ", r[i]);
fclose(f);
fclose(g);
return 0;
}