Pagini recente » Cod sursa (job #1737056) | Cod sursa (job #533064) | Cod sursa (job #2573876) | Cod sursa (job #2356720) | Cod sursa (job #371009)
Cod sursa(job #371009)
//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;
}