Cod sursa(job #645143)

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

#define DIST(x, y) (y - x + 1)
#define SWAP(x, y) (x^=y^=x^=y)

unsigned long int *arr = NULL;

long partition(long lo, long hi)
{
	short dLo = 0, dHi = 1;
	while(lo < hi)
	{
		if(arr[lo] > arr[hi])
		{
			SWAP(dLo, dHi);
			SWAP(arr[lo], arr[hi]);
		}
		lo += dLo;
		hi -= dHi;
	}
	return lo;
}

void sort(long lo, long hi)
{
	long index;
	if(lo < hi)
	{
		index = partition(lo, hi);
		sort(lo, index - 1);
		sort(index + 1, hi);
	}
}

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

	fscanf(fpi, "%u", &size);
	arr = (unsigned long int*)malloc(sizeof(unsigned long int) * size);
	for(i = 0; i < size; ++i)
		fscanf(fpi, "%u", &arr[i]);

	sort(0L, (long)(size - 1));

	for(i = 0; i < size; ++i)
		fprintf(fpo, "%u ", arr[i]);

	fclose(fpo);
	fclose(fpi);
	free(arr);

	return 0;
}