Cod sursa(job #825631)

Utilizator maritimCristian Lambru maritim Data 29 noiembrie 2012 12:00:18
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;

FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");

int N;
int A[1000];

inline void swap(int &a,int &b)
{
    int aux = a;
    a = b;
    b = aux;
}

void afisare(void)
{
    for(int i=1;i<=N;i++)
        fprintf(g,"%d ",A[i]);
    fprintf(g,"\n");
}

inline int pozQS(int li,int ls)
{
    int k = rand()%(ls-li);
    int i;

    swap(A[li+k],A[li]);

    for(i=li+1;i<=ls;)
        if(A[li] < A[i])
            swap(A[i],A[ls]),--ls;
        else
            ++i;

    swap(A[li],A[--i]);

    return i;
}

inline void QuickSort(int li,int ls)
{
    if(li >= ls)
        return ;

    int k = pozQS(li,ls);
    QuickSort(li,k-1);
    QuickSort(k+1,ls);
}

void citire(void)
{
    fscanf(f,"%d",&N);
    for(int i=1;i<=N;i++)
        fscanf(f,"%d",&A[i]);
}

int main()
{
    citire();
    srand(time(NULL));
    QuickSort(1,N);

    afisare();
}