Cod sursa(job #1806756)

Utilizator aianisAndra Dumitru aianis Data 15 noiembrie 2016 17:53:13
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream in("sdo.in");
ofstream out("sdo.out");

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

int partitie(int v[], 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 qs(int v[], int st, int dr, int k) {
    if(st>=dr)
        return;
    int p=partitie(v, st, dr);
    if(k<p)
    qs(v, st, p-1, k);
    if(k>p)
    qs(v, p+1, dr, k);
}

int main() {
    int v[3000001], i, n, j, k;
    in>>n>>k;
    for(i=1; i<=n; i++)
    in>>v[i];
    for(i=n; i>=1; i--){
    j=1+rand()%i;
    schimb(v[i], v[j]);
    }
    qs(v, 1, n, k);
    out<<v[k];
    return 0;
}