Cod sursa(job #1275312)

Utilizator sing_exFMIGhita Tudor sing_ex Data 24 noiembrie 2014 23:28:33
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

int part(int *v, int l, int r) {
    int p = (l+r) / 2;
    int i,x,pos,value;
    value = v[p];
    x = v[p];
    v[p] = v[r];
    v[r] = x;
    pos = l;
    for (i=l;i<r;i++) {
        if (v[i] < value) {
            x = v[i];
            v[i] = v[pos];
            v[pos] = x;
            pos++;
        }
    }
    x = v[pos];
    v[pos] = v[r];
    v[r] = x;
    return pos;
}

void pivot (int *v, int l, int r, int k) {
    if (l == r || l > r) return;
    int p = part(v,l,r);
    if (k > p) pivot(v,p+1,r,k);
    if (k <= p) pivot(v,l,p-1,k);
}


int main()
{
    int n,k,i;
    ifstream f("sdo.in");
    f>>n;
    f>>k;
    i = 0;
    int v[n];
    while(f>>v[i]) i++;
    f.close();
    pivot(v,0,n-1,k);
    ofstream g("sdo.out");
    g<<v[k-1];
    g.close();
    return 0;
}