Cod sursa(job #2356374)

Utilizator cristicretancristi cretan cristicretan Data 26 februarie 2019 17:23:06
Problema Sortare prin comparare Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#define NMax 500001

void Merge(int *v, int start, int pivot, int end)
{
	int i;
	int b[NMax];
	for(i = start; i <= end; ++i)
		b[i] = 0;
	i = start;
	int k = start;
	int j = pivot + 1;
	while(i <= pivot && j <= end)
	{
		if(v[i] <= v[j]) b[k++] = v[i++];
		else b[k++] = v[j++];
	}
	while(i <= pivot) b[k++] = v[i++];
	while(j <= end) b[k++] = v[j++];
	for(i = start; i <= end; ++i)
		v[i] = b[i];
}

void Merge_Sort(int *v, int start, int end)
{
	if(start < end)
	{
		int pivot = start + (end - start)/2; /// (start + end)/2
		Merge_Sort(v, start, pivot);
		Merge_Sort(v, pivot + 1, end);
		Merge(v, start, pivot, end);
	}
}

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