Pagini recente » Cod sursa (job #2666463) | Cod sursa (job #361965) | Cod sursa (job #446723) | Cod sursa (job #86132) | Cod sursa (job #1245817)
#include <stdio.h>
#include <stdlib.h>
int v[3000001];
void switch_elem(int i, int j)
{
int glass = v[i];
v[i] = v[j];
v[j] = glass;
}
int partition(int beg, int end)
{
int pivot = v[end];
int i = beg - 1;
int j;
for (j = beg; j <= end - 1; j++) {
if (v[j] <= pivot) {
i = i + 1;
switch_elem(i, j);
}
}
switch_elem(i + 1, end);
return i + 1;
}
int randomized_select(int beg, int end, int i)
{
if (beg == end) return v[beg];
int r = rand() % (end - beg) + beg;
switch_elem(r, end);
int elem = partition(beg, end);
int k = elem - beg + 1;
if (i == k) return v[elem];
else if (i < k) return randomized_select(beg, elem - 1, i);
else return randomized_select(elem + 1, end, i - k);
}
int main()
{
int n, k;
int i;
FILE *fdi = fopen("sdo.in", "r");
fscanf(fdi, "%d%d", &n, &k);
for (i = 1; i <= n; i++) fscanf(fdi, "%d", &v[i]);
fclose(fdi);
srand(time(NULL));
int q = randomized_select(1, n, k);
FILE *fdo = fopen("sdo.out", "w");
fprintf(fdo, "%d\n", q);
fclose(fdo);
return 0;
}