Pagini recente » Cod sursa (job #2102496) | Cod sursa (job #1242590) | Cod sursa (job #1049752) | Cod sursa (job #1575075) | Cod sursa (job #2225469)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int sir[3000001];
int part(int stg, int dr) {
int pivot = sir[stg];
int i = stg - 1;
int j = dr + 1;
while (1) {
do {
j--;
} while (sir[j] >= pivot);
do {
i++;
} while (sir[i] <= pivot);
if (i < j) {
int aux = sir[i];
sir[i] = sir[j];
sir[j] = aux;
}
else {
return j;
}
}
}
int random_part(int stg, int dr) {
int r = rand() % (dr + 1);
int aux = sir[stg];
sir[stg] = sir[r];
sir[r] = aux;
return part(stg, dr);
}
int quick_select(int stg, int dr, int k) {
if (stg == dr) {
return sir[stg];
}
int index = random_part(stg, dr);
int len = index - stg + 1;
if (k < len) {
return quick_select(stg, index, k);
}
else {
return quick_select(index + 1, dr, k - len);
}
}
int main() {
FILE* ip;
FILE* op;
ip = fopen("sdo.in", "r");
if (ip == NULL) {
perror("Error opening input file");
return 1;
}
op = fopen("sdo.out", "w");
if (op == NULL) {
perror("Error opening output file");
return 1;
}
int n, k;
fscanf(ip, "%d%d", &n, &k);
for (int i = 0; i < n; i++) {
fscanf(ip, "%d", &sir[i]);
}
fprintf(op, "%d", quick_select(0, n - 1, k - 1)); //k - 1 pt. ca sirul e indexat de la 0
fclose(ip);
fclose(op);
return 0;
}