Cod sursa(job #303574)

Utilizator cristiprgPrigoana Cristian cristiprg Data 9 aprilie 2009 23:48:14
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
#define DIM 500005

int a[DIM], n;

int divide(int p, int q)
{
	int st = p, dr = q, x = a[p];
	while (st < dr)
	{
		while (st < dr && a[dr] >= x)
			dr--;

		a[st] = a[dr];

		while (st < dr && a[st] <= x)
			st++;

		a[dr] = a[st];
	}

	a[st] = x;
	return st;

}


void qsort(int p, int q)
{
	int m = divide(p, q);

	if (m - 1 > p)
		qsort(p, m - 1);
	if (m + 1 < q)
		qsort(m + 1, q);
}

int main()
{
	FILE *f = fopen("algsort.in", "r");
	fscanf(f, "%d", &n);
	int i;
	for (i = 0; i < n; i++)
		fscanf(f, "%d", &a[i]);
	fclose(f);
	qsort(0, n - 1);

	f = fopen("algsort.out", "w");

	for (i = 0; i < n; i++)
		fprintf(f, "%d ", a[i]);

	fclose(f);

	return 0;
}