Pagini recente » Cod sursa (job #1045179) | Cod sursa (job #1342293) | Cod sursa (job #1018573) | Cod sursa (job #2676824) | Cod sursa (job #1806763)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N=3000001;
int v[N];
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 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;
}