Cod sursa(job #660827)

Utilizator StefanLacheStefan Lache StefanLache Data 13 ianuarie 2012 13:33:13
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void interschimbare(int &x,int &y)
{
    x=x+y-(y=x);
}
int pivot(int A[],int st,int dr)
{
    int x=A[dr];
    int i=st-1;
    for(int j=st;j<=dr-1;j++)
        if(A[j]<=x)
        {
            i++;
            interschimbare(A[i],A[j]);
        }
    interschimbare(A[i+1],A[dr]);
    return i+1;
}
int random(int A[],int st,int dr)
{
    int x=rand() %dr;
    interschimbare(A[x],A[dr]);
    return pivot(A,st,dr);
}
void Quicksort(int A[],int st,int dr)
{
    if(st<dr)
    {
        int piv=pivot(A,st,dr);
        Quicksort(A,st,piv-1);
        Quicksort(A,piv+1,dr);
    }
}
int main()
{
    FILE *f=fopen("algsort.in","rt");
    FILE *g=fopen("algsort.out","wt");
    srand(time(NULL));
    int A[300000],n;
    fscanf(f,"%i",&n);
    for(int i=0;i<n;i++)
        fscanf(f,"%i",&A[i]);
    Quicksort(A,0,n-1);
    for(int i=0;i<n;i++)
        fprintf(g,"%i ",A[i]);
    fclose(f);
    fclose(g);
    return 0;
}