Cod sursa(job #767905)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 15 iulie 2012 12:46:58
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 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], N;


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

	int mid = (left + right) >> 1;
	
	sorting_like_a_boss(left, mid);
	sorting_like_a_boss(mid + 1, right);
	
	int pz1 = left, pz2 = mid + 1, curr = left;
	
	int A2[maxn];

	for(int i = left; i <= right; ++i) {
		if(pz2 == right + 1 || A[pz1] < A[pz2]) {
			A2[curr++] = A[pz1++];
			continue;
		}
		if(pz1 == mid + 1 || A[pz2] < A[pz1]) {
			A2[curr++] = A[pz2++];
			continue;
		}
	}
	for(int i = left; i <= right; ++i)
		A[i] = A2[i];

}
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;
}