Pagini recente » Cod sursa (job #588427) | Cod sursa (job #2046899) | Cod sursa (job #1054453) | Cod sursa (job #3000688) | Cod sursa (job #3162406)
#include <stdio.h>
#include <time.h>
void swap(int *a, int *b){
int aux=*a;
*a=*b;
*b=aux;
}
int partition(int a[], int left, int right) {
int pivot = rand() % (right - left + 1) + left;
int x = a[pivot];
swap(&a[right], &a[pivot]);
int i = left - 1;
for (int j = left; j <= right - 1; j++)
if (a[j] <= x)
swap(&a[++i], &a[j]);
swap(&a[i + 1], &a[right]);
return i + 1;
}
int quickselect(int a[], int left, int right, int k) {
int index = partition(a, left, right);
if (k == index)
return a[k];
else if (k < index)
return quickselect(a, left, index - 1, k);
return quickselect(a, index + 1, right, k);
}
int main() {
srand(time(NULL));
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
int n, k;
scanf("%d %d ", &n, &k);
int a[n];
for (int i = 0; i < n; i++)
scanf("%d ", &a[i]);
printf("%d\n", quickselect(a, 0, n - 1, k-1));
return 0;
}