Cod sursa(job #940127)

Utilizator forgetHow Si Yu forget Data 15 aprilie 2013 17:53:12
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <vector>
using namespace std;

vector<int> a;

void quicksort(int l, int r)
{
	if (l >= r) return;
	int pivot = a[r];
	int i(l), j(r-1), p(l), q(r-1);
	while (true) {
		while (a[i] < pivot) ++i;
		while (a[j] > pivot && j > l) --j;
		if (i >= j) break;
		swap(a[i++],a[j--]);
		if (a[i] == pivot) swap(a[p++],a[i]);
		if (a[j] == pivot) swap(a[q--],a[j]);
	}
	swap(a[i],a[r]);
	j = i;
	for (int k = l; k < p; ++k) swap(a[k],a[--j]);
	for (int k = r-1; k > q; --k) swap(a[k],a[++i]);
	quicksort(l,j-1);
	quicksort(i+1,r);

}

int main()
{
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");
	int n;
	fin >> n;
	a.resize(n);
	for (int i = 0; i < n; ++i)
		fin >> a[i];
	quicksort(0,n-1);
	for (int i = 0; i < n; ++i)
		fout << a[i] << ' ';
	return 0;
}