Pagini recente » Cod sursa (job #847806) | Cod sursa (job #826377) | Cod sursa (job #1367799) | Cod sursa (job #1560349) | Cod sursa (job #1184811)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int v[3000001];
int schimb(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
int partitie(int st,int dr)
{
int i,j;
i = st + rand() % (dr - st + 1);
schimb(v[i], v[dr]);
j=st;
for(i=st;i<dr;i++)
if(v[i]<v[dr])
schimb(v[j++],v[i]);
schimb(v[j],v[dr]);
return j;
}
void qs2 (int st, int dr , int poz)
{
if ( st >= dr )
return ;
int p = partitie(st , dr);
if ( poz < p )
qs2(st, p-1 , poz);
if ( poz > p )
qs2 ( p+1 , dr , poz);
}
int main()
{
int n, k, i ;
in >> n >> k ;
for(i=1; i<=n ; i++)
in >> v[i] ;
qs2( 0 , n , k);
out << v [k] ;
return 0;
}