Cod sursa(job #296269)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 4 aprilie 2009 15:27:35
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
# 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;
}