Cod sursa(job #953384)

Utilizator sorin2kSorin Nutu sorin2k Data 25 mai 2013 21:31:48
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
using namespace std;

void swap(int *a, int *b)
{
	int aux = *a;
	*a = *b;
	*b = aux;
}

int partition(int *a, int p, int r)
{
	int x, i, j;
	i = p - 1; // limita superioara a elementelor mai mici decat pivotul
	x = a[r]; // pivotul
	for(j = p; j < r; j++)
	{
		if(a[j] < x) // daca elem curent e mai mic decat pivotul
		{
			i++; // marim spatiul numerelor mai mici decat pivotul
			swap(a + i, a + j); // schimbam numarul mai mic decat x cu primul element care era mai mare ca x
			// a[j] va ajunge in multimea de nr. mai MICI decat pivotul
		}
	}
	swap(a + i + 1, a + r); // mutam pivotul la mijloc <=> il schimbam cu primul element mai mare ca el
	return i + 1;
}

void quickSort(int *a, int p, int r)
{
	if(p < r)
	{
		int q = partition(a, p, r);
		quickSort(a, p, q - 1);
		quickSort(a, q + 1, r);
	}
}

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