Cod sursa(job #2596781)

Utilizator CharacterMeCharacter Me CharacterMe Data 10 aprilie 2020 13:36:10
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define BYTE(x) ((x >> (dv * 8)) & 255)

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()
{

    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;
}