Cod sursa(job #1556770)

Utilizator D4n13LMuntean Dan Iulian D4n13L Data 25 decembrie 2015 21:37:50
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>
#include<stdlib.h>

void merge(int *v, int start,int mij,int end)
{
	int *v1 = (int *) calloc(mij - start + 1, sizeof(int));
	int i, j;
	for(i = 0; i < mij - start + 1; i++)
		v1[i] = v[start + i];
	int *v2 = (int *) calloc(end - mij, sizeof(int));
	for(i = 0; i < end - mij; i++)
		v2[i] = v[mij + 1 + i];
	int n1 = mij - start + 1;
	int n2 = end - mij;
	i = j = 0;
	int k = start;
	while(i < n1 && j < n2)
	{
		if(v1[i] < v2[j])
			v[k++] = v1[i++];
		else
			v[k++] = v2[j++];
	}
	while( i < n1)
		v[k++] = v1[i++];
	while( j < n2)
		v[k++] = v2[j++];
	free(v1);
	free(v2);
}

void mergeSort(int *v, int start,int end)
{
	if(end<= start)
		return;
	int mij = (start + end)/2;
	mergeSort(v,start,mij);
	mergeSort(v,mij+1,end);
	merge(v,start,mij,end);
}




int main(void)
{

	FILE * fin = fopen("algsort.in","rt");
	FILE * fout = fopen("algsort.out","wt");
	int n;
	fscanf(fin,"%d",&n);
//	printf("%d ", n);
	int * v;
	v = (int*) malloc(n*sizeof(int));
	int i;
	for(i = 0 ; i < n ; i++)
	{
		fscanf(fin,"%d",v+i);
//		printf("%d ",v[i]);
	}
	mergeSort(v,0,n-1);
	for(i = 0; i < n; i++)
		fprintf(fout,"%d ", v[i]);
	fclose(fin);
	fclose(fout);
	return 0;
}