Cod sursa(job #2277156)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 5 noiembrie 2018 20:36:00
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <random>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500001;
int n, v[N];
int partitie (int v[], int st, int dr) {
    int ra=st+rand()%(dr-st+1);
    int rb=st+rand()%(dr-st+1);
    int rc=st+rand()%(dr-st+1);
    if(v[ra]>v[rb])
    {
        swap(ra,rb);
    }
    if(v[ra]>v[rc])
    {
        swap(ra,rc);
    }
    if(v[rb]>v[rc])
    {
        swap(rb,rc);
    }
    int poz=rb;
    swap(v[dr],v[poz]);
    int pivot = v[dr];
    int i=st-1;
    int j=dr+1;
    while(1)
    {
        do
        {
            i++;
        }
        while(v[i]<pivot);
        do
        {
            j--;
        }
        while(v[j]>pivot);
        if(i>=j)
        {
            return j;
        }
        swap(v[i],v[j]);
    }
}
void quicksort (int v[], int st, int dr) {
    if(st < dr) {
        int part = partitie (v, st, dr);
        quicksort (v, st, part);
        quicksort (v, part + 1, dr);
    }
}
void afisare (int v[]) {
    for(int i = 1; i <= n; i ++)
        g << v[i] << ' ';
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; i ++)
        f >> v[i];
    quicksort (v, 1, n);
    afisare (v);
    return 0;
}