Pagini recente » Cod sursa (job #1245520) | Cod sursa (job #2717797) | Cod sursa (job #2500362) | Cod sursa (job #221996) | Cod sursa (job #804164)
Cod sursa(job #804164)
/*
* Using randomized quicksort partition algorithm
*/
#include <fstream>
#include <cstdlib>
using namespace std;
int n, k, v[3000005];
int select (int l, int r)
{
int i, j, t, pivot;
pivot = l + rand() % (r - l + 1);
t = v[r]; v[r] = v[pivot]; v[pivot] = t;
for (i = l - 1, j = l; j < r; ++j)
if (v[r] >= v[j])
{
++i;
t = v[i];
v[i] = v[j];
v[j] = t;
}
t = v[++i];
v[i] = v[r];
v[r] = t;
if (i == k) return v[i];
else if (i < k) return select (i+1, r);
else return select (l, i-1);
}
int main()
{
int i;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
srand(16);
fin >> n >> k;
for (i = 1; i <= n; ++i)
fin >> v[i];
fout << select (1, n) << endl;
fin.close();
fout.close();
return 0;
}