Cod sursa(job #371009)

Utilizator avram_florinavram florin constantin avram_florin Data 3 decembrie 2009 00:03:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
//algoritm de sortare
#include<cstdio>
#define MAXN 500010
using namespace std;
int n,i,a[MAXN],b[MAXN];
void merge_sort(int li,int ls)
{
	int m= (li + ls) >> 1 ,i, j, k;
	if(li==ls)
		return;
	merge_sort(li,m);
	merge_sort(m+1,ls);
	for(i=li,j=m+1,k=li;i<=m||j<=ls;)	//plec cu i de li si cu j=m+1
		if(j>ls||(i<=m&&a[i]<a[j]))		//daca j a depasit ls atunci adaug in b[k]=a[i] sau adaug in b[k]=a[i] daca i<=m si a[i] e mai mic decat a[j] 
			b[k++]=a[i++];
			else
			b[k++]=a[j++];	//altfel adaug in b[k] pe a[j]
	for(k=li;k<=ls;k++)
		a[k]=b[k];	//de la k=li,ls a[k] primeste vectorul sortat; 
}
int main ()
{
	freopen("algsort.in", "r",stdin);
	freopen("algsort.out", "w",stdout);
	scanf("%d" , &n);	//citire n;
	for(i=1;i<=n;i++)
		scanf("%d" , &a[i]);	//citire vector
	merge_sort(1,n);	//sortare merge_sort
	for(i=1;i<=n;i++)
		printf("%d " , a[i]);	//afisare;
	return 0;
}