Pagini recente » Cod sursa (job #3330432) | Cod sursa (job #2967987) | Cod sursa (job #3334121) | Cod sursa (job #2226065) | Cod sursa (job #296269)
Cod sursa(job #296269)
# include <stdio.h>
int a[500005],i,n,aux,q,p,k,b[500005],c[500005],d[500005];
void sort (int i,int j)
{
if (a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
aux=b[i];
b[i]=b[j];
b[j]=aux;
}
}
void interc (int i,int j,int mij)
{
q=i;
p=mij+1;
k=0;
while (q<=mij && p<=j)
{
if (a[q]<a[p])
{
c[k]=a[q];
d[k]=b[q];
k++;
q++;
}
else
{
c[k]=a[p];
d[k]=b[p];
k++;
p++;
}
}
while (q<=mij)
{
c[k]=a[q];
d[k]=b[q];
k++;
q++;
}
while (p<=j)
{
c[k]=a[p];
d[k]=b[p];
k++;
p++;
}
k=0;
for (q=i;q<=j;q++)
{
a[q]=c[k];
k++;
}
k=0;
for (q=i;q<=j;q++)
{
b[q]=d[k];
k++;
}
}
void divimp (int i,int j)
{
int mij;
if (j-i<=1)
sort (i,j);
else
{
mij=(i+j)/2;
divimp (i,mij);
divimp (mij+1,j);
interc (i,j,mij);
}
}
int main ()
{
freopen ("algsort.in","r",stdin);
freopen ("algsort.out","w",stdout);
scanf ("%i",&n);
for (i=1;i<=n;i++)
scanf ("%i",&a[i]);
divimp (1,n);
for (i=1;i<=n;i++)
printf ("%i ",a[i]);
return 0;
}