Cod sursa(job #484154)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 12 septembrie 2010 15:09:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>

#define Nmax 500001

int n, A[Nmax];

void swap(int st, int mij, int dr) {
	int B[Nmax], i, j, k, t;
	i=st; j=mij+1; k=st;
	
	while(i<=mij && j<=dr) 
		if(A[i]<A[j]) 
			B[k++]=A[i++];
		else
			B[k++]=A[j++];
	
	if(i<=mij) 
		for(t=i; t<=mij; t++)
			B[k++]=A[t];
	else
		for(t=j; t<=dr; t++)
			B[k++]=A[t];
	
	for(t=st; t<=dr; t++)
		A[t]=B[t];
}

void mergesort(int st, int dr) {
	int mij;
	if(st<dr) {//return;
	mij=(st+dr)/2;
	mergesort(st,mij);
	mergesort(mij+1,dr);
	swap(st,mij,dr);}
}

int main() {
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	
	int i,n;
	
	scanf("%d",&n);
	for(i=1; i<=n; i++)
		scanf("%d",&A[i]);
	
	mergesort(1,n);
	
	for(i=1; i<=n; i++)
		printf("%d ",A[i]);
	
	return 0;
}