Cod sursa(job #476938)

Utilizator blasterzMircea Dima blasterz Data 12 august 2010 19:50:28
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>

#define N 500001

using namespace std;

int a[N];
int n;

int part_lomuto (int l, int r)
{
	int v = l + rand () % (r - l + 1);

	swap (a[v], a[r]);

	int i;
	int nr = l - 1;

	for (i = l ; i <= r; ++i)
		if (a[i] <= a[r])
			swap (a[++nr], a[i]);

	return nr;

}

int noMore (int l, int r)
{
	int i;
	for (i = l + 1 ; i <= r;  ++i)
		if (a[l] != a[i])
			return 0;
	return 1;

}
void quick (int l, int r)
{
	if (l >= r)
		return;
	
	if (noMore (l, r))
		return;

	int m = part_lomuto (l, r);
	
	quick (l, m - 1);
	quick (m, r);

}


int main ()
{
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);

	scanf ("%d\n", &n);

	int i;
	for (i = 1; i <= n; ++i)
		scanf ("%d ", &a[i]);
	
	quick (1, n);
	
	for (i = 1; i <= n; ++i)
		printf ("%d ", a[i]);
	printf ("\n");

	return 0;
}