Pagini recente » Cod sursa (job #3139426) | Cod sursa (job #1816202) | Cod sursa (job #3226522) | Cod sursa (job #2446967) | Cod sursa (job #2378099)
#include <fstream>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int DIM = 3000001;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
int sir[DIM];
int partitie(int, int);
void qs(int, int, int);
int n, k;
int main()
{
srand(time(0));
cin >> n >> k;
for(int i = 0; i < n; ++i)
{
cin >> sir[i];
}
k--;
for(int i = n; i > 0; --i)
{
int p = rand() % i;
swap(sir[i - 1], sir[p]);
}
qs(0, n - 1, k);
cout << sir[k];
return 0;
}
void qs(int st, int dr, int k)
{
if(st >= dr)
{
return;
}
int m = partitie(st, dr);
if(k < m)
{
qs(st, m - 1, k);
}
if(k > m)
{
qs(m + 1, dr, k);
}
}
int partitie(int st, int dr)
{
int m = st;
for(int i = st; i < dr; ++i)
{
if(sir[i] < sir[dr])
swap(sir[i], sir[m++]);
}
swap(sir[m], sir[dr]);
return m;
}