Cod sursa(job #1117381)

Utilizator negrea.andreiAndrei Negrea negrea.andrei Data 23 februarie 2014 14:19:35
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
#define N 500005

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

void swap(int* A, int i, int j)
{
	int aux;
	aux = A[i];
	A[i] = A[j];
	A[j] = aux;
}

int partition(int *A, int pivot, int lt, int rt)
{
    swap(A, lt, pivot);
	int pos = lt + 1;

	for(int i = lt + 1; i <= rt; i++)
	{
		if (A[i] < A[lt])
		{
			swap(A, pos, i);
			pos++;
		}
	}

	swap(A, lt, pos - 1);
	return pos - 1;
}

void qsort(int *A, int lt, int rt)
{
	if (lt < rt)
	{
		int randomPos = lt + rand() % (rt - lt + 1);
		int pivotPosition = partition(A, randomPos, lt, rt);
		qsort(A, lt, pivotPosition - 1);
		qsort(A, pivotPosition + 1, rt);
	}
	
}

int n, A[N];

int main()
{	
	f >> n;
	for(int i = 1; i <= n; i++)
	{
		f >> A[i];
	}

	qsort(A, 1, n);
	
	for(int i = 1; i <= n; i++)
	{
		g << A[i] << " ";
	}
	return 0;
}