Cod sursa(job #976711)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 23 iulie 2013 19:02:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

int v[500005];

int alege(int n)
{
    int x;
    if((n/RAND_MAX))
        x=rand()%(n/RAND_MAX);
    else
        x=0;
    return ((x*RAND_MAX)+rand())%n;
}

void qsort(int st,int dr)
{
    if(st>=dr)
        return;

    int p=alege(dr-st+1)+st;
    swap(v[p],v[st]);

    int i,j;
    for(i=st+1,j=st+1;i<=dr;i++)
        if(v[i]<v[st])
        {
            swap(v[i],v[j]);
            j++;
        }
    swap(v[st],v[j-1]);

    qsort(st,j-2);
    qsort(j,dr);
}

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

    srand(time(0));

    int n=0,i;
    fin>>n;

    for(i=1;i<=n;i++)
        fin>>v[i];

    //Functia de QuickSort ia TLF pe ultimul test, asa ca am sa folosesc IntroSort-ul din STL
    sort(v+1,v+n+1);
    for(i=1;i<=n;i++)
        fout<<v[i]<<' ';

    fin.close();
    fout.close();
    return 0;
}