Pagini recente » Cod sursa (job #29793) | Cod sursa (job #1412734) | Cod sursa (job #1757194) | Cod sursa (job #91675) | Cod sursa (job #830389)
Cod sursa(job #830389)
#include<cstdio>
#include<ctime>
#include<cstdlib>
void swap(int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
void afis(int *v, int n)
{
for(int i = 1; i <= n; ++i)
fprintf(stderr, "%d ", v[i]);
fprintf(stderr, "\n");
}
void sdo(int *v, int a, int b, int k)
{
if(a >= b)
return;
int i = a - 1, j = b;
int p = rand() % (b - a) + a;
swap(v[p], v[b]);
p = b;
while(1) {
while(v[++i] < v[p]);
while(v[p] < v[--j]);
if(i < j)
swap(v[i], v[j]);
else
break;
}
swap(v[i], v[p]);
if(k < i)
sdo(v, a, i - 1, k);
else if(i < k)
sdo(v, i + 1, b, k);
else
return;
}
int main()
{
srand(time(NULL));
FILE *in = fopen("sdo.in", "r");
FILE *out = fopen("sdo.out", "w");
int n;
int k;
fscanf(in, "%d%d", &n, &k);
int *v = new int[n + 1];
for(int i = 1; i <= n; ++i)
fscanf(in, "%d", v + i);
sdo(v, 1, n, k);
fprintf(out, "%d\n", v[k]);
return 0;
}