Pagini recente » Cod sursa (job #2486603) | Cod sursa (job #1547137) | Cod sursa (job #1699264) | Cod sursa (job #750840) | Cod sursa (job #1246264)
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define MAX 3000000
using namespace std;
int N, K;
int nrs[MAX];
void partition(int left, int right){
int r = rand() % (right - left + 1);
int pivot = left + r, i = left + 1, j = right;
swap(nrs[pivot], nrs[left]);
while(i < j){
while(i <= right && nrs[i] <= nrs[left]){
i++;
}
while(j > left && nrs[j] > nrs[left]){
j--;
}
if(i <= right && j > left && i < j){
swap(nrs[i], nrs[j]);
}
}
swap(nrs[left], nrs[j]);
if(j == K) return ;
if(j < K)
partition(j+1, right);
else
partition(left, j-1);
}
int main(){
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &N, &K);
K--;
srand(time(NULL));
for(int i = 0; i < N; i++){
scanf("%d", &nrs[i]);
}
partition(0, N-1);
printf("%d", nrs[K]);
return 0;
}