Cod sursa(job #1492268)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 27 septembrie 2015 15:01:06
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int v[100005],v2[100005];
void sor(int st,int fi)
{
    if(st>=fi)
    return ;
    int in,po,x,i,t,i1,i2;
    in=st;
    po=rand();
    po=po%(fi-st+1);
    x=v[st+po];
    t=1;
    i1=st;
    i2=fi;
   for(i=st;i<=fi;i++)
   if(v[i]==x)
   {
       if(t)
       {
           v2[i1]=v[i];
           i1++;
           t=0;
       }
       else
       {
           v2[i2]=v[i];
           i2--;
           t=1;
       }

   }
   for(i=st;i<=fi;i++)
   {
   if(v[i]<x)
   {
       v2[i1]=v[i];
       i1++;
   }
   else
   if(v[i]>x)
   {
       v2[i2]=v[i];
       i2--;
   }
   }
   for(i=st;i<=fi;i++)
   v[i]=v2[i];
    sor(st,i1-1);sor(i1,fi);
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&v[i]);
    sor(1,n);
    for(i=1;i<=n;i++)
    printf("%d ",v[i]);
    return 0;
}