Cod sursa(job #645732)

Utilizator DaicuDaicu Alexandru Daicu Data 10 decembrie 2011 13:23:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
int n,a[500001],b[500001];
void citire(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
}

void merge(int i,int i1,int j,int j1){
	int k=i,v=0;
	while(i<=i1 && j<=j1){
		if(a[i]<=a[j]){
			b[++v]=a[i];
			i++;
		}
		else{
			b[++v]=a[j];
			j++;
		}
	}
	while(i<=i1)
		b[++v]=a[i++];
	while(j<=j1)
		b[++v]=a[j++];
	for(v=1;v<=(j1-k+1);v++)
		a[k+v-1]=b[v];
}
			

void mergesort(int i,int j){
	if(i==(j-1)){
		if(a[i]>a[j])
			a[i]=a[i]^a[j]^(a[j]=a[i]);
	}
	if(i<j-1){
		int mij=(i+j)/2;
		mergesort(i,mij);
		mergesort(mij+1,j);
		merge(i,mij,mij+1,j);
	}
}

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