Cod sursa(job #645158)

Utilizator belginstirbuasdf asdf belginstirbu Data 8 decembrie 2011 18:52:19
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

unsigned long *arr;

void merge(long lo, long m, long hi)
{
	unsigned long i, j, k, *b;
	
	b = (unsigned long*)malloc(sizeof(unsigned long) * (hi - lo + 1));
	
	for(i = lo, k = 0; i <= hi; ++i, ++k)
		b[k] = arr[i];
		
	for(i = k = lo, j = m + 1; i <= m && j <= hi;)
		if(b[i - lo] < b[j - lo])
			arr[k++] = b[i++ - lo];
		else
			arr[k++] = b[j++ - lo];
			
	while(i <= m)
		arr[k++] = b[i++ - lo];
	
	while(j <= hi)
		arr[k++] = b[j++ - lo];
		
	free(b);
}

void sort(long lo, long hi)
{
	long m = (lo + hi)/2;
	if(lo < hi)
	{
		sort(lo, m);
		sort(m + 1, hi);
		merge(lo, m, hi);
	}
}

int main()
{
	unsigned long i;
	unsigned long size;
	FILE *fpi = fopen("algsort.in", "r");
	FILE *fpo = fopen("algsort.out", "w");

	fscanf(fpi, "%u", &size);
	arr = (unsigned long*)malloc(sizeof(unsigned long) * size);

	for(i = 0; i < size; ++i)
		fscanf(fpi, "%u", arr + i);
	
	sort(0, size - 1);
	
	for(i = 0; i < size; ++i)
	{
		fprintf(fpo, "%u ", arr[i]);
		//printf("%u ", arr[i]);
	}

	fclose(fpi);
	fclose(fpo);
	free(arr);
	
	return 0;
}