Pagini recente » Cod sursa (job #2095763) | Cod sursa (job #473598) | Cod sursa (job #1227875) | Cod sursa (job #1525063) | Cod sursa (job #2064580)
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int s[3000010], k;
int partitionare(int st, int dr) {
int x = (rand() % (dr - st + 1) + rand() % (dr - st + 1) + rand() % (dr - st + 1)) / 3;
int i = st - 1, j = dr + 1;
int p = s[x + st];
while (1) {
do
i = i + 1;
while (s[i] < p);
do
j = j - 1;
while (s[j] > p);
if (i >= j)
return j;
int aux = s[i];
s[i] = s[j];
s[j] = aux;
}
}
void quicksort(int st, int dr) {
if (st < dr) {
int p = partitionare(st, dr);
if (p == k) return;
if (p > k)
quicksort(st, p);
else if (p < k)
quicksort(p + 1, dr);
}
}
int main() {
int N;
f >> N >> k;
for (int i = 1; i <= N; i++)
f >> s[i];
quicksort(1, N);
g << s[k];
return 0;
}