Cod sursa(job #767450)

Utilizator igsifvevc avb igsi Data 13 iulie 2012 16:17:26
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.84 kb
#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;
}