Cod sursa(job #2608397)

Utilizator Silviu.Stancioiu@gmail.comSilviu Stancioiu [email protected] Data 1 mai 2020 11:34:44
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

int Partition(uint32_t* v, int l, int r)
{
    uint32_t x = v[r];
    int i = l;

    for (int j = l; j <= r - 1; j++)
        if (v[j] <= x)
        {
            swap(v[i], v[j]);
            i++;
        }

    swap(v[i], v[r]);

    return i;
}

uint32_t QuickSelect(uint32_t* v, int left, int right, int pos)
{
    if (pos > 0 && pos <= right - left + 1)
    {
        int index = Partition(v, left, right);

        if (index - left == pos - 1)
            return v[index];

        if (index - left >= pos - 1)
            return QuickSelect(v, left, index - 1, pos);

        return QuickSelect(v, index + 1, right, pos - index + left - 1);
    }

    return -1;
}

int main()
{
    int n, k;
    ifstream fin("sdo.in");
    fin >> n >> k;

    uint32_t* v = new uint32_t[n];
    for (int i = 0; i < n; i++)
        fin >> v[i];

    fin.close();

    ofstream fout("sdo.out");
    fout << QuickSelect(v, 0, n - 1, k);
    fout.close();

    return 0;
}