Cod sursa(job #650330)

Utilizator lavinia_nLavinia Nastase lavinia_n Data 17 decembrie 2011 21:11:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>

int a[500001],n;

void sort(int s,int d){
	int m;
	if(a[s]>a[d]) {
        m=a[s];
        a[s]=a[d];
        a[d]=m;
        }
}

void interclasare(int s,int d,int m) {
	int i,j,k=1,b[500001];
	i=s,j=m+1;
	while(i<=m && j<=d)
		if(a[i]<=a[j]) {
			b[k++]=a[i];
            ++i;
            }
		else {
			b[k++]=a[j];
            ++j; 
            }
	if(i<=m)
		for(j=i;j<=m;j++)
			b[k++]=a[j];
	else
		for(i=j;i<=d;i++)
			b[k++]=a[i];
	k=1;
	for(i=s;i<=d;i++)
		a[i]=b[k++];
}
void MergeSort(int s,int d){
	int m;
	if((d-s)<=1)
		sort(s,d);
	else
	{
		m=(s+d)/2;
		MergeSort(s,m);
		MergeSort(m+1,d);
		interclasare(s,d,m);
	}
}
int main(){
	int i;
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	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;
}