Pagini recente » Cod sursa (job #2011941) | Cod sursa (job #1683568) | Cod sursa (job #1703344) | Cod sursa (job #2480979) | Cod sursa (job #1428298)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 3000000
int v[MAX_N];
int quickSelect(int left, int right, int k) {
if (left == right) {
return v[left];
}
int i = left - 1;
int j = right + 1;
int piv = v[left + rand() % (right - left + 1)];
do {
do {
i++;
} while (v[i] < piv);
do {
j--;
} while (v[j] > piv);
if (i < j) {
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
} while (i < j);
if (k <= j - left + 1) {
return quickSelect(left, j, k);
} else {
return quickSelect(j + 1, right, k - (j - left + 1));
}
}
int main(void) {
FILE *f = fopen("sdo.in", "r");
int n, k;
fscanf(f, "%d%d", &n, &k);
for (int i = 0; i < n; i++) {
fscanf(f, "%d", &v[i]);
}
fclose(f);
f = fopen("sdo.out", "w");
srand(time(0));
fprintf(f, "%d\n", quickSelect(0, n - 1, k));
fclose(f);
return 0;
}