Pagini recente » Cod sursa (job #2710034) | Cod sursa (job #196620) | Cod sursa (job #2217765) | Cod sursa (job #2721059) | Cod sursa (job #3357267)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
inline void swap(int* a, int* b) {
int aux = *a;
*a = *b;
*b = aux;
}
int partition(int array[], int left, int right) {
int Pivot = array[(left + right) / 2];
int L = left;
int R = right;
while (L <= R) {
while (array[L] < Pivot)
L++;
while (array[R] > Pivot)
R--;
if (L <= R) {
swap(&array[L], &array[R]);
L++;
R--;
}
}
return L;
}
int quickselect(int array[], int k, int left, int right) {
while (left < right) {
int p = partition(array, left, right);
if (k < p) right = p - 1;
else left = p;
}
return array[k];
}
int main(int agrc, char* argv[]) {
FILE* input = fopen("sdo.in", "r");
if (input == NULL) exit(1);
int n, k;
fscanf(input, "%d %d", &n, &k);
int* v = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
fscanf(input, "%d", &v[i]);
fclose(input);
FILE* output = fopen("sdo.out", "w");
if (output == NULL) exit(2);
fprintf(output, "%d", quickselect(v, k - 1, 0, n - 1));
fclose(output);
free(v);
return 0;
}