Cod sursa(job #2279120)

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

using namespace std;

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

int n, a[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;
	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, r = dr;
	while (l <= r) {
		while (a[l] < piv2)
			l++;
		while (a[r] > piv2)
			r--;
		if (l <= r) {
			swap(a[l], a[r]);
			l++;
			r--;
		}
	}
	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;
}