Cod sursa(job #1806755)

Utilizator edi9876Negescu Eduard Mihai edi9876 Data 15 noiembrie 2016 17:53:03
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <stdlib.h>

using namespace std;

int v[3000000];

void schimb(int &a, int &b) {
    int c = a;
    a = b;
    b = c;
}

int partitie(int st, int dr) {
    int i, j, piv = v[dr];
    for(i = j = st; i < dr; i++)
        if(v[i] < piv) {
            schimb(v[i], v[j]);
            j++;
        }
    schimb(v[j], v[dr]);
    return j;
}

void quickSort(int st, int dr, int k) {
    if(st >= dr)
        return;
    int p = partitie(st, dr);
    if(k < p)
        quickSort(st, p - 1, k);
    if(k > p)
        quickSort(p + 1, dr, k);
}

int main()
{
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    unsigned int n;
    int k;
    fin >> n >> k;
    for(int i = 0; i < n; i++)
        fin >> v[i];
    for(int i = n - 1; i >= 1; i--) {
        int j = 1 + rand()%i;
        schimb(v[i], v[j]);
    }
    k--;
    quickSort(0, n - 1, k);
    fout << v[k];
    return 0;
}