Pagini recente » Cod sursa (job #1390472) | Cod sursa (job #990134) | Cod sursa (job #1615484) | Cod sursa (job #1300945) | Cod sursa (job #1806756)
#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;
}