Cod sursa(job #1431070)

Utilizator andy94Andrei Ursache andy94 Data 8 mai 2015 23:31:12
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<stdlib.h>

using namespace std;

int partition(vector<int> &v, int lower, int upper) {
	int i;
	// Alege pivot random
	srand((unsigned) time(NULL));
	double r = (double) rand() / RAND_MAX;
	int p = lower + r * (upper - lower);
	// Il pune pe ultima pozitie pentru a fi mai usor de gestionat
	swap(v[upper], v[p]);
	p = v[upper], i = lower;
	for (int j = lower; j <= upper - 1; j++) {
		if (v[j] <= p) {
			swap(v[i], v[j]);
			i++;
		}
	}
	swap(v[i], v[upper]);
	return i;

}

void qsort(vector<int> &v, int lower, int upper) {
	int index = partition(v, lower, upper);
	if (lower < index) {
		qsort(v, lower, index - 1);
	}
	if (upper > index) {
		qsort(v, index + 1, upper);
	}

}

int main() {

	freopen("input.in", "r", stdin);
	freopen("output.out", "w", stdout);

	int n;
	cin >> n;

	vector<int> v;
	v.reserve(n);

	for (int i = 0; i < n; ++i) {
		cin >> v[i];
	}

	qsort(v, 0, n);

	for (int i = 0; i < n; ++i) {
		cout << v[i] << " ";
	}

	fclose(stdin);
	fclose(stdout);
	return 0;
}