Cod sursa(job #1314149)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 11 ianuarie 2015 16:29:23
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
//QuickSort
#include <cstdio>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
#define NMAX 500003

using namespace std;

int v[NMAX],n;

int poz(int st, int dr)
{
    int i;
    int p = rand()%(dr-st) + st, is=st, id=dr, ip=0;
    for(i=1; i<=n; i++)
        if(v[i]<=v[p])ip++;
    swap(v[ip],v[p]);

    do
    {
        while(is<ip && v[is]<v[ip]) is++;
        while(id>ip && v[id]>v[ip]) id--;
        if(is<ip)
            swap(v[is++],v[id--]);
    }
    while(is<ip);
    return ip;
}

void quick(int s, int d)
{
    int m;
    if(s<d)
    {
        m = poz(s,d);
        quick(s,m-1);
        quick(m+1,d);
    }
}


int main()
{
    int i;
    FILE *f = fopen("algsort.in", "r");
    fscanf(f, "%d", &n);
    for(i=1; i<=n; i++)
        fscanf(f, "%d", &v[i]);
    fclose(f);

    srand(time(NULL));
    quick(1,n);

    f = fopen("algsort.out", "w");
    for(i=1; i<=n; i++)
        fprintf(f, "%d ", v[i]);
    fclose(f);
    return 0;
}