Cod sursa(job #3005333)

Utilizator AndPitAndreeaPiticar AndPit Data 16 martie 2023 21:31:29
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
// QuickSort cu pivotare random - ordonare crescatoare
// (1) si (2) fac ca sortarea sa fie crescatore
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
#define NMAX 40000000
unsigned int a[NMAX];
int divide(int st,int dr){ // functia in care se face pivotarea
    int poz;
    poz=st+rand()%(dr-st+1);
    unsigned int aux;
    aux=a[st];
    a[st]=a[poz];
    a[poz]=aux;
    unsigned int pivot=a[st];
    while(st<dr){
        while(st<dr&&a[dr]>=pivot) // (1)
            dr--;
        a[st]=a[dr];
        while(st<dr&&a[st]<=pivot) // (2)
            st++;
        a[dr]=a[st];
    }
    a[st]=pivot;
    return st;
}
void qsort(int st,int dr){
    int poz;
    if(st<dr){
        poz=divide(st,dr);
        qsort(st,poz-1);
        qsort(poz+1,dr);
    }
}
int main(){
    int n;
    srand(time(NULL));
    cin>>n;
    for(int i=1;i<=n;++i)
        cin>>a[i];
    qsort(1,n);
    for(int i=1;i<=n;++i)
        cout<<a[i]<<" ";
    return 0;
}