Pagini recente » Cod sursa (job #2381718) | Cod sursa (job #1665917) | Cod sursa (job #421469) | Cod sursa (job #2633145) | Cod sursa (job #1449080)
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
#define N 3000005
int a[N], n, k;
inline void schimb(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void part3(int li, int lf, int &p1, int &p2) {
p1 = li;
p2 = lf - 1;
int i = li, piv = a[lf];
while (i <= p2) {
if (a[i] < piv)
schimb(a[i++], a[p1++]);
else if (a[i] > piv)
schimb(a[i], a[p2--]);
else
i++;
}
schimb(a[lf], a[++p2]);
}
void quicksort(int li, int lf, int k) {
int m1, m2;
if(li>=lf)
return;
//m=pozdiv(a,li,lf);
part3(li, lf, m1, m2);
if(k < m1)
quicksort(li, m1 - 1, k);
if(k > m2)
quicksort(m2 + 1, lf, k);
}
int main()
{
srand(time(NULL));
in >> n >> k;
for(int i = 1; i <= n; i++)
in >> a[i];
for (int i = n; i >= 1; i--)
{
int p = 1 + rand()%i;
schimb(a[i], a[p]);
}
quicksort(1, n, k);
out << a[k] << '\n';
return 0;
}