Cod sursa(job #767906)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 15 iulie 2012 12:52:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 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, A2[maxn];


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 curr = left;

	int i, j;
	for(i = left, j = mid + 1; i <= mid && j <= right; ) {
		if(A[i] <= A[j]) {
			A2[curr++] = A[i]; 
			++i; continue;
		} 
		if(A[j] < A[i]) {
			A2[curr++] = A[j];
			++j; continue;
		}
	}
	for(; i <= mid; ++i) A2[curr++] = A[i];
	for(; j <= right; ++j) A2[curr++] = A[j];

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