Cod sursa(job #478440)

Utilizator a.stanciuStanciu Adrian a.stanciu Data 18 august 2010 17:31:53
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <stdlib.h>

int *w;

void merge(int *v, int n, int i, int m, int j)
{
	int a = i, b = m + 1, k = i;
	
 	while (a <= m && b <= j)
		if (v[a] < v[b])
		{
			w[k++] = v[a];
			a++;
		}
		else
		{
			w[k++] = v[b];
			b++;
		}
	while (a <= m)
	{
		w[k++] = v[a];
		a++;
	}
	while (b <= j)
	{
		w[k++] = v[b];
		b++;
	}

	for (k = i; k <= j; k++)
		v[k] = w[k];
}

void mergesort(int *v, int n, int i, int j)
{
	if (i < j)
	{
		int m = (i + j) / 2;
		mergesort(v, n, i, m);
		mergesort(v, n, m + 1, j);
		merge(v, n, i, m, j);
	}
}

int main()
{
	int n, *v, i;
	FILE *f, *g;

	f = fopen("algsort.in", "r");
	g = fopen("algsort.out", "w");

	fscanf(f, "%d", &n);

	v = (int *)malloc(sizeof(int) * n);
	w = (int *)malloc(sizeof(int) * n);

	for (i = 0; i < n; i++)
		fscanf(f, "%d", &v[i]);

	mergesort(v, n, 0, n - 1);
	
	for (i = 0; i < n; i++)
		fprintf(g, "%d ", v[i]);

	fclose(f);
	fclose(g);

	return 0;
}