Cod sursa(job #305352)

Utilizator dya_ndmNanuti Diana-Maria dya_ndm Data 16 aprilie 2009 23:46:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
long n,x[500001];
int ok;
long partitie(long st, long dr)
{
 long i,j,m,p,aux;
 m=(st+dr)/2;
 i=st-1;
 j=dr+1;
 p=x[m];
 while(1)
 {
  do{++i;} while(x[i]<p);
  do{--j;} while(x[j]>p);
  if(i<j)
  {
   aux=x[i];
   x[i]=x[j];
   x[j]=aux;
  }
  else return j;
 }
}
void quicks(long st, long dr)
{
 long p;
 if(st<dr)
 {
  p=partitie(st,dr);
  quicks(st,p);
  quicks(p+1,dr);
 }
}

int main()
{
 freopen("algsort.in","r",stdin);
 freopen("algsort.out","w",stdout);

 scanf("%ld",&n);

 long i;

 for(i=1;i<=n;++i)
    {
    scanf("%ld",&x[i]);
    if((x[i-1]<=x[i]) && (ok!=2))
      ok=1;
    else
      ok=2;
    }
 if(ok==2)
   {
   quicks(1,n);
   for(i=1;i<=n;++i)
      printf("%ld ",x[i]);
   }
else
   {
   for(i=n;i>=1;--i)
      printf("%ld ",x[i]);
   }
printf("\n");
return 0;
}