Cod sursa(job #1013110)

Utilizator ELHoriaHoria Cretescu ELHoria Data 20 octombrie 2013 12:25:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>

const int nmax = int(5e5);
int n;
int a[nmax], b[nmax];

void readData() {
	scanf("%d",&n);
	for(int i = 0;i < n;i++) {
		 scanf("%d",&a[i]);
	 }
}

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

void mergeSort(int left,int right) {
	if(right - left + 1 < 3) {
		if(right - left + 1 == 2 && a[left] > a[right]) {
			swap(a[left],a[right]);
		}
		return;
	}
	int mid = (left + right)>>1;
	mergeSort(left,mid);
	mergeSort(mid + 1,right);
	for(int i = left, j = mid + 1, k = 0;i <= mid || j <= right;k++) {
		b[k] = (j > right || (i <= mid && a[i] < a[j])) ? a[i++] : a[j++];
	}
	
	for(int i = left;i <= right;i++) {
		a[i] = b[i - left];
	}

}

void printData() {
	for(int i = 0;i < n;i++) {
		printf("%d ",a[i]);
	}
	printf("\n");
}


int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	readData();
	mergeSort(0,n - 1);
	printData();
	return 0;
}