Cod sursa(job #1414934)

Utilizator mKwZBLSsdfsad mKwZBLS Data 3 aprilie 2015 12:44:50
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdlib.h>
#include <stdio.h>

int  *msort(int *v, int n) {
	int *rez = malloc(sizeof(int) * n);
	if (n == 1) {
		rez[0] = *v;
		return rez;
	}
	int p = n/2;
	int *r1 = msort(v, p);
	int *r2 = msort(v + p, (n - p));
	int i, j, k;
	for (i = 0, j = 0, k = 0; i < n; i++) {
		if (((r1[j] < r2[k]) || k >= (n - p))&& (j < p)) {
			rez[i] = r1[j];
			j++;
		}
		else {
			rez[i] = r2[k];
			k++;
		}
	}
	free(r1);
	free(r2);
	return rez;
}

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