Pagini recente » Cod sursa (job #3154917) | Cod sursa (job #3030017) | Istoria paginii runda/cnmnarad | Cod sursa (job #2570422) | Cod sursa (job #767450)
Cod sursa(job #767450)
#include<stdio.h>
#include<stdlib.h>
typedef unsigned int uint;
FILE *in, *out;
uint v[500000], aux[500000], N;
void mergesort(uint l, uint r)
{
uint middle, ll, rr, i;
if(r == l) return;
middle = l + (r - l) / 2;
mergesort(l, middle);
mergesort(middle + 1, r);
for(i = l, ll = l, rr = middle + 1; ll <= middle && rr <= r; ++i)
if(v[ll] <= v[rr])
aux[i] = v[ll++];
else
aux[i] = v[rr++];
while(rr <= r) aux[i++] = v[rr++];
while(ll <= middle) aux[i++] = v[ll++];
for(i = l; i <= r; ++i)
v[i] = aux[i];
}
int main()
{
uint i;
in = fopen("algsort.in", "r");
out = fopen("algsort.out", "w");
fscanf(in, "%d", &N);
for(i = 0; i < N; ++i)
fscanf(in, "%d", &v[i]);
mergesort(0, N-1);
for(i = 0; i < N; ++i)
fprintf(out, "%d ", v[i]);
fprintf(out, "\n");
fclose(in);
fclose(out);
return 0;
}