Pagini recente » Cod sursa (job #2195861) | Cod sursa (job #933839) | Cod sursa (job #2978172) | Cod sursa (job #2573502) | Cod sursa (job #1043031)
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
const int MAXN = 3000005;
int N, K, v[MAXN];
void Swap(int a, int b)
{
int aux = v[a];
v[a] = v[b];
v[b] = aux;
}
int HoarePartition(int left, int right) {
int pivot = v[left],
i = left - 1,
j = right + 1;
while (1) {
do { --j; } while (v[j] > pivot);
do { ++i; } while (v[i] < pivot);
if (i < j) Swap(i, j);
else return j;
}
}
int RandomHoarePartition(int left, int right) {
int ran = (rand() % (right - left)) + left + 1;
Swap(ran, left);
return HoarePartition(left, right);
}
int QSort(int left, int right) {
if (left == right) return v[left];
int pivot = RandomHoarePartition(left, right);
if (left <= pivot && K <= pivot) QSort(left, pivot);
else if (pivot <= right && K > pivot) QSort(pivot + 1, right);
}
int main()
{
srand(time(NULL));
f >> N >> K;
for (int i = 1; i <= N; ++i)
f >> v[i];
g << QSort(1, N) << '\n';
/*
for (int i = 1; i <= N; ++i)
g << v[i] << ' ';*/
return 0;
}