Pagini recente » Cod sursa (job #3267741) | Cod sursa (job #1511634) | Cod sursa (job #2967012) | Cod sursa (job #2295659) | Cod sursa (job #804177)
Cod sursa(job #804177)
/*
* Using randomized 3-way quicksort partition algorithm
*/
#include <fstream>
#include <cstdlib>
using namespace std;
int n, k, v[3000005];
int select (int l, int r)
{
int i, j, q, t, pivot;
pivot = l + rand() % (r - l + 1);
t = v[r]; v[r] = v[pivot]; v[pivot] = t;
for (i = l-1, j = l-1, q = l; q < r; ++q)
if (v[r] >= v[q])
{
++j;
t = v[j];
v[j] = v[q];
v[q] = t;
if (v[j] != v[r])
{
++i;
if (i != j)
{
t = v[j];
v[j] = v[i];
v[i] = t;
}
}
}
t = v[++j];
v[j] = v[r];
v[r] = t;
if (i < k && k <= j) return v[j];
else if (j < k) return select (j+1, r);
else return select (l, i);
}
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;
}