Cod sursa(job #3201331)

Utilizator UengineDavid Enachescu Uengine Data 7 februarie 2024 16:46:58
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

const int VMAX = 100001;
int v[VMAX];

int partitionare(int v[], int st, int dr){
    int pp = (rand() & (dr - st )) + st;
    swap(v[pp], v[dr]);
    int p = st;
    for(int i = st; i < dr; i++){
        if(v[i] <= v[dr])
            swap(v[p++], v[i]);
    }
    swap(v[p], v[dr]);
    return p;
}

void qs(int v[], int st, int dr){
    if(st >= dr)
        return;
    int p = partitionare(v, st, dr);
    qs(v, st, p - 1);
    qs(v, p + 1, dr);
}

int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> v[i];
    }
    //shuffles
    for (int i = n - 1; i > 0; i--){
        int poz_rand = rand() % (i + 1);
        swap(v[i], v[poz_rand]);
    }
    qs(v, 0, n - 1);
    for(int i = 0; i < n; i++){
        cout << v[i]<< ' ';
    }
    return 0;
}