Cod sursa(job #514038)

Utilizator SpiderManSimoiu Robert SpiderMan Data 17 decembrie 2010 17:04:18
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 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;
}

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

	int m = part_lomuto (l, r);

	quick (l, m - 1);
	quick (m + 1, r);

}


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

	scanf ("%d", &n);

	for ( int i = 1; i <= n; ++i )
		scanf ("%d ", a + i);

	quick (1, n);

	for (int i = 1; i <= n; ++i )
		printf ("%d ", a[i]);
}