Cod sursa(job #767892)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 15 iulie 2012 12:28:20
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <algorithm>

#define f sorting_like_a_boss

const int maxn = 500010;
using namespace std;

int A[maxn];

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

inline int segment(int left, int right, int piv) {

	swap(A[piv], A[right]);
	
	int go = left;

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

	return go;
}
inline void sorting_like_a_boss(int left, int right) {
	
	if(left >= right) return ;

	int pivOld = left + rand() % (right - left + 1);
	
	int pivNew = segment(left, right, pivOld);

	sorting_like_a_boss(left, pivNew - 1);
	sorting_like_a_boss(pivNew + 1, right);
}
int N;

int main() {
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");

	fin >> N;	
	srand(time(NULL));
	
	for(int i = 1; i <= N; ++i)
		fin >> A[i];
	
	random_shuffle(A + 1, A + N + 1);

	sorting_like_a_boss(1, N);
	for(int i = 1; i <= N; ++i)
		fout << A[i] << " " ;
	return 0;
}