Cod sursa(job #2244139)

Utilizator CezarTDTodirisca Cezar CezarTD Data 22 septembrie 2018 11:52:15
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

const int b=32000;
struct parser{
   char *B,*E,*p;
   parser()
   {
       B=new char[b+10];
       E=B+b;
       Load();
   }
   parser &operator>>(int &x)
   {
       while(*p<'0' || *p>'9')Next();
       x=0;
       while(*p>='0' && *p<='9')
       {
           x=x*10+*p-'0';
           Next();
       }
       return *this;
   }
   void Load()
   {
       p=B;
       memset(B,0,b);
       fread(B,1,b,stdin);
   }
   void Next()
   {
       p++;
       if(p==E)Load();
   }

};

int partitie(int *A,int Start,int End)
{
    int ind=Start+rand()%(End-Start+1);
    swap(A[ind],A[End]);
    int pivot=A[End];
    int pIndex=Start;
    for(int i=Start;i<End;i++)
    {
        if(A[i]<=pivot)
        {
            swap(A[i],A[pIndex]);
            pIndex++;
        }
    }
    swap(A[End],A[pIndex]);
    return pIndex;
}

void quick(int *A,int Start,int End)
{
    if(Start<End)
    {
        int index=partitie(A,Start,End);
        quick(A,Start,index-1);
        quick(A,index+1,End);
    }
}

int main()
{
    /*freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    parser fin;*/
    int n,v[500001];
    fin>>n;
    for(int i=1;i<=n;i++)fin>>v[i];
    quick(v,1,n);
    for(int i=1;i<=n;i++)
    {
        fout<<v[i]<<' ';
        //printf("%d ",v[i]);
    }
    return 0;
}