Cod sursa(job #856135)

Utilizator mihaitza_1993Fieraru Mihai mihaitza_1993 Data 15 ianuarie 2013 22:54:30
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <time.h>
#include <stdlib.h>


using namespace std;

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

int partition(int a[], int p, int q)
{
    int x,i,j,aux;
    x=a[p];
    i=p;
    for(j=p+1;j<=q;j++)
        if(a[j]<=x)
        {
            i++;
            aux=a[i];
            a[i]=a[j];
            a[j]=aux;
        }
    aux=a[i];
    a[i]=a[p];
    a[p]=aux;
    return i;
}

int rand_partition(int a[], int p, int q)
{
    int d,x,aux;
    srand(time(NULL));
    d=q-p+1;
    x=p+(rand()%d);
    aux=a[x];
    a[x]=a[p];
    a[p]=aux;
    return partition(a,p,q);
}

void quicksort(int a[], int p, int q)
{
    if(p<q)
    {
        int x;
        x=rand_partition(a,p,q);
        quicksort(a,p,x-1);
        quicksort(a,x+1,q);
    }
}


int main()
{
    int n,i,a[500010];
    in>>n;
    for(i=1;i<=n;i++) in>>a[i];
    //out<<rand_partition(a,1,n)<<"\n";
    quicksort(a,1,n);
    for(i=1;i<=n;i++) out<<a[i]<<" ";
    return 0;
}