Cod sursa(job #940771)

Utilizator forgetHow Si Yu forget Data 17 aprilie 2013 01:30:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>
using namespace std;

vector<int> a;

void quicksort(int l, int r)
{
	if (l >= r) return;
	swap(a[(l+r)/2],a[r]);
	int pivot = a[r];
	int i(l-1), j(r), p(l), q(r-1);
	while (true) {
		while (a[++i] < pivot);
		while (a[--j] > pivot && j >= l);
		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;
}