Pagini recente » Cod sursa (job #2325154) | Cod sursa (job #2813212) | Cod sursa (job #2706991) | Cod sursa (job #2601215) | Cod sursa (job #633758)
Cod sursa(job #633758)
#include<stdio.h>
#define nmax 500001
unsigned int n,a[nmax];
void citire()
{
freopen("algsort.in","r",stdin);
scanf("%u",&n);
unsigned int i;
for(i=0;i<n;i++)
scanf("%u",&a[i]);
fclose(stdin);
}
void afisare()
{
freopen("algsort.out","w",stdout);
unsigned int i;
for(i=0;i<n;i++)
printf("%u ",a[i]);
fclose(stdout);
}
void interclaseaza(unsigned int st,unsigned int mijl,unsigned int dr)
{
unsigned int i,j,nr,b[nmax];
for(i=st,j=mijl+1,nr=0;i<=mijl && j<=dr;nr++)
if(a[i]<a[j])
{
b[nr]=a[i];
i++;
}
else
{
b[nr]=a[j];
j++;
}
while(i<=mijl)
{
b[nr]=a[i];
i++;nr++;
}
while(j<=dr)
{
b[nr]=a[j];
j++;nr++;
}
for(i=0;i<nr;i++)
a[st+i]=b[i];
}
void sortare(unsigned int st,unsigned int dr)
{
if(st<dr)
{
unsigned int mijl=(st+dr)/2;
sortare(st,mijl);
sortare(mijl+1,dr);
interclaseaza(st,mijl,dr);
}
}
int main()
{
citire();
if(n>=1)
sortare(0,n-1);
afisare();
return 0;
}