Pagini recente » Cod sursa (job #2420298) | Cod sursa (job #1157369) | Cod sursa (job #679610) | Cod sursa (job #349365) | Cod sursa (job #460323)
Cod sursa(job #460323)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <stack>
#define maxN 3000100
using namespace std;
int V[maxN];
int partition (int Left, int Right){
int piv, aux, i = Left - 1, j = Right + 1;
piv = V[Left + rand () % (Right - Left + 1)];
// piv = V[(Left + Right) >> 1];
while (1){
do {++i;} while (V [i] < piv);
do {--j;} while (V [j] > piv);
if (i < j){
aux = V[i];
V[i] = V[j];
V[j] = aux;
}
else
return j;
}
}
void quick_sort(int Left, int Right, int K){
if (Left < Right){
int Middle = partition (Left, Right);
if (K <= Middle)
quick_sort (Left, Middle, K);
else
quick_sort (Middle + 1, Right, K);
}
}
int main(){
int N, K, i, a;
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d\n", &N, &K);
srand(time(NULL));
for (i = 0; i < N; ++i){
scanf("%d", &V[i]);
}
quick_sort(0, N - 1, K - 1);
printf("%d\n", V[K - 1]);
}