Cod sursa(job #2599619)

Utilizator CharacterMeCharacter Me CharacterMe Data 11 aprilie 2020 16:41:15
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

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

int n;
int nums[500005];

void qSort(int lft, int rgt);
int position(int lft, int rgt);

int main()
{
    srand(time(0));

    fin >> n;
    for(int i = 1; i <= n; ++i){
        fin >> nums[i];
    }

    qSort(1, n);

    for(int i = 1; i <= n; ++i){
        fout << nums[i] << " ";
    }

    return 0;
}

void qSort(int lft, int rgt){
    if(lft >= rgt) return;

    int p = position(lft, rgt);
    qSort(lft, p - 1);
    qSort(p + 1, rgt);
}

int position(int lft, int rgt){
    int il = 1, ir = 0;
    int pos = rand() % (rgt - lft + 1) + lft;
    swap(nums[lft], nums[pos]);

    while(lft < rgt){
        if(nums[lft] > nums[rgt]){
            swap(nums[lft], nums[rgt]);
            swap(il, ir);
        }

        lft += il;
        rgt -= ir;
    }

    return lft;
}