Cod sursa(job #1710941)

Utilizator contnouAndrei Pavel contnou Data 30 mai 2016 05:33:32
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#define MAXN 500005

using namespace std;

int A[MAXN];

int partition(int left, int right) {
	int pivotPos = rand() % (right - left + 1);

	int aux = A[left];
	A[left] = A[left + pivotPos];
	A[left + pivotPos] = aux;
	
	int pos = left;
	for (int i = left + 1; i <= right; i++) {
		if (A[i] < A[left]) {
			pos++;
			aux = A[i];
			A[i] = A[pos];
			A[pos] = aux;
		}
	}

	aux = A[left];
	A[left] = A[pos];
	A[pos] = aux;

	return pos;
}

void qsort(int left, int right) {
	if (left < right) {
		int pos = partition(left, right);
		qsort(left, pos - 1);
		qsort(pos + 1, right);
	}
}


int main() {
	int n;

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

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

	qsort(1, n);

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

	g << endl; 

	return 0;
}