Cod sursa(job #2669248)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 6 noiembrie 2020 16:26:23
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
 
using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

inline int randBetween(int lb, int ub)
{
    return lb + rand() % (ub - lb + 1);
}

inline int choosePivot(int lb, int ub)
{
    return (lb + ub) / 2;
}

inline int chooseRandomPivot(int lb, int ub)
{
    return randBetween(lb, ub);
}

void quickSort(vector<int> &v, int lb, int ub)
{

    if(lb >= ub)
        return;

    int piv = choosePivot(lb, ub);
    swap(v[piv], v[ub]);
    int left = lb;
    int right = ub - 1;
    while(left <= right)
    {
        while(v[left] < v[ub])
            left++;
        while(v[right] >= v[ub] && right >= left)
            right--;

        if(left < right)
            swap(v[left], v[right]);
    }
    swap(v[left], v[ub]);

    piv = left;
    quickSort(v, lb, piv - 1);
    quickSort(v, piv + 1, ub);
}

int main()
{
    // srand(time(NULL));
    
    int n;
    fin >> n;
    vector<int> v(n);
    for(int &x : v)
        fin >> x;
    

    quickSort(v, 0, v.size() - 1);

    for(int x : v)
        fout << x << ' ';

    return 0;
}