Pagini recente » Cod sursa (job #366827) | Cod sursa (job #258043) | rglshw_2 | Cod sursa (job #202714) | Cod sursa (job #2278418)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int arr[3000001];
void swp(int * a, int * b)
{
int aux = *a;
*a = *b;
*b = aux;
}
int partition(int left, int right)
{
int s = rand () % (right - left + 1) + left;
swp(&arr[s], &arr[right]);
int pivot = arr[right];
int i = left;
for (int j = left; j < right; j++){
if(arr[j] < pivot){
if (i != j){
swp(&arr[i], &arr[j]);
}
i++;
}
}
swp(&arr[right], &arr[i]);
return i;
}
int kel(int left, int right, int k)
{
int p = partition(left, right);
if (p == k) return arr[k];
if (p < k) kel(p + 1, right, k);
else kel(left, p - 1, k);
}
int main()
{
FILE *f, *g;
f = fopen("sdo.in", "r");
g = fopen("sdo.out", "w");
srand( time(NULL));
int n, k;
fscanf(f,"%d%d", &n, &k);
for (int i = 1; i <= n; i++) fscanf(f, "%d", &arr[i]);
int x = kel(1, n, k);
fprintf(g,"%d",x);
return 0;
}