Cod sursa(job #1710932)

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

using namespace std;

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

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

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

	swap(A, left, pos);
	return pos;
}

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


int main() {
	int n;
	int A[MAXN];

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

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

	qsort(A, n, 1, n);

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

	g << endl; 

	return 0;
}