Cod sursa(job #645133)

Utilizator belginstirbuasdf asdf belginstirbu Data 8 decembrie 2011 17:13:41
Problema Sortare prin comparare Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#include <stdlib.h>

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

int partition(unsigned long int *arr, unsigned int lo, unsigned int hi)
{
	unsigned int pivot = arr[lo + (hi - lo + 1)/2];

	while(lo < hi)
	{
		while(arr[lo] < pivot) ++lo;
		while(arr[hi] > pivot) --hi;
		if(lo < hi)
		{
			SWAP(arr[lo], arr[hi]);
			++lo;
			--hi;
		}
	}
	return lo;
}

void sort(unsigned long int *arr, unsigned int lo, unsigned int hi)
{
	unsigned int index;
	if(lo < hi)
	{
		index = partition(arr, lo, hi);
		sort(arr, lo, index - 1);
		sort(arr, index, hi);
	}
}

void quickSort(unsigned long int *arr, int size)
{
	sort(arr, 0, size-1);
}

int main()
{
	unsigned long int *arr = NULL;
	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]);

	quickSort(arr, size);

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

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

	return 0;
}