Cod sursa(job #1521264)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 10 noiembrie 2015 07:07:00
Problema Sortare prin comparare Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100

void swap(int *p, int *q) {
	int tmp = *p;
	*p = *q;
	*q = tmp;
}


void print(FILE *g, int *v, int n) {
	int i;
	for (i =  1; i <= n; i++) {
		fprintf(g, "%d%c", v[i] , (i<n? ' ' : '\n' ));
	}
}

int merge(int *v, int p, int middle,  int q) {
	int tmp[NMAX];// = malloc( n * sizeof(int));
	int i,j,k;
	for (i = p; i <= q; i++) {
		tmp[i] = v[i];
	}
	i = p;
	j = middle+1;
	k = p;
	while (i <= middle && j <= q) {
		if (tmp[i] <= tmp[j]) v[k++] = tmp[i++];
		else v[k++] = tmp[j++];
	}
	while (i <= middle)v[k++] = tmp[i++];;
	while (j <= q) v[k++] = tmp[j++];
}

void mergeSort(int *v, int p, int q) {
	if (p < q) {
		int middle = (p+q)/2;
		mergeSort(v, p, middle);
		mergeSort(v, middle+1, q);
		merge(v, p, middle, q);
	}
}

int main() {
	FILE *f = fopen("algsort.in", "r");
	FILE *g = fopen("algsort.out", "w");

	srand(time(NULL));

	int n, *v,i;
	fscanf(f,"%d", &n);
	v = (int *)malloc((n+1) * sizeof(int));
	
	for (i =  1; i <= n; i++) {
		fscanf(f,"%d", &v[i]);
	}
	mergeSort(v, 1, n);
	print(g, v, n);
	free(v);
	return 0;
}