Cod sursa(job #2279112)

Utilizator flibiaVisanu Cristian flibia Data 8 noiembrie 2018 22:19:09
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#pragma GCC optimize("03")

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

int n, a[500100], aux[500100];

void Sort(int st, int  dr) {
	if (st >= dr)
		return;
	int len = dr - st + 1;
//	int piv1 = rand() % len + st;
	int piv2 = rand() % len + st;
	piv2 = a[piv2];
//	int piv3 = rand() % len + st;
//	piv1 = a[piv1];
//	piv2 = a[piv2];
//	piv3 = a[piv3];
//	if (piv1 > piv2)
//		swap(piv1, piv2);
//	if (piv2 > piv3)
//		swap(piv2, piv3);
//	if (piv1 > piv2)
//		swap(piv1, piv2);
	int l = st - 1;
	int r = dr + 1;
	for (int i = st; i <= dr; i++)
		if (a[i] < piv2)
			aux[++l] = a[i];
		else if (a[i] > piv2)
			aux[--r] = a[i];
	for (int i = st; i <= dr; i++)
		if (a[i] == piv2)
			aux[++l] = piv2;
	for (int i = st; i <= dr; i++)
		a[i] = aux[i];
	Sort(st, l - 1);
	Sort(l + 1, dr);
}

int main() {
	srand(time(NULL));
	in >> n;
	for (int i = 1; i <= n; i++)
		in >> a[i];
	Sort(1, n);
	for (int i = 1; i <= n; i++)
		out << a[i] << ' ';
	return 0;
}