Cod sursa(job #1519909)

Utilizator sing_exFMIGhita Tudor sing_ex Data 8 noiembrie 2015 00:27:53
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>

void merge(int *v,int l,int r) {
	int m = (l + r) / 2,i = l,j = m+1,k = 0,*p;
	p = (int*)malloc((r - l + 1)*sizeof(int));
	while (i <= m && j <= r) {
		if (v[i] < v[j]) {
			p[k] = v[i];
			i++;
		}
		else {
			if (v[j] < v[i]) {
				p[k] = v[j];
				j++;
			}
			else {
				p[k++] = v[i++];
				p[k] = v[j++];
			}
		}
		k++;
	}
	while (i <= m) p[k++] = v[i++];
	while (j <= r) p[k++] = v[j++];
	for (i=0;i+l<=r;i++) v[i+l] = p[i];
	free(p);
}

void mergesort(int *v,int l,int r) {
	if (l == r) return;
	int m = (l + r) / 2;
	mergesort(v,l,m);
	mergesort(v,m+1,r);
	merge(v,l,r);
}

int main() {
	int n,i,*v;
	FILE *f = fopen("algsort.in","r");
	fscanf(f,"%d",&n);
	v = (int*)malloc(n*sizeof(int));
	for (i=0;i<n;i++) fscanf(f,"%d",&v[i]);
	fclose(f);
	mergesort(v,0,n-1);
	f = fopen("algsort.out","w");
	for(i=0;i<n;i++) fprintf(f,"%d ",v[i]);
	fclose(f);
	free(v);
	return 0;
}