Cod sursa(job #2184187)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 23 martie 2018 20:16:10
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <cstdio>
#include <stdlib.h>
#include <ctime>
using namespace std;

//ifstream fin ("algsort.in");
//ofstream fout ("algsort.out");
FILE *fin = fopen ("algsort.in","r");
FILE *fout = fopen ("algsort.out","w");
int n,i,p,v[500002];
int poz (int st,int dr){
    int x = st + rand() % (dr-st+1);
    swap ( v[st], v[x]);
    int dst = 0;
    int ddr = -1;
    int aux;
    while (st < dr){
        if (v[st] > v[dr]){
            swap (v[st],v[dr]);
            aux = dst;
            dst = -ddr;
            ddr = -aux;
        }
        st += dst;
        dr += ddr;
    }
    return st;
}

void sorteaza (int st,int dr){
    if (st <= dr){
        int p = poz (st,dr);
        sorteaza (st,p-1);
        sorteaza (p+1,dr);

    }

}

int main (){

    //fin>>n;
    //for (i=1;i<=n;i++)
      //  fin>>v[i];
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    srand (time(0));
    /// functia rand returneaza un numar aleator intre 0 si 32000
    /*
    for (i=n-1;i>=3;i--){
        p = 1 + rand() % (i-1);
        swap (v[p],v[i]);
    }
    */
    sorteaza (1,n);
    for (i=1;i<=n;i++)
        fprintf (fout,"%d ",v[i]);
    //    fout<<v[i]<<" ";


    return 0;
}