Pagini recente » Cod sursa (job #214369) | Cod sursa (job #2231708) | Cod sursa (job #333773) | Cod sursa (job #2492755) | Cod sursa (job #2422132)
#include <fstream>
std::ifstream in("sdo.in");
std::ofstream out("sdo.out");
const int Nmax = 3000000;
int partition(unsigned int nums[], int start, int end)
{
unsigned int x = nums[end];
int i = start;
for (int j = start; j <= end - 1; j++) {
if (nums[j] <= x)
{
std::swap(nums[i], nums[j]);
i++;
}
}
std::swap(nums[i], nums[end]);
return i;
}
unsigned int QuickSelect(int start, int end, unsigned int nums[], int k)
{
if (start < end)
{
int index = partition(nums, start, end);
if (index - start == k - 1)
return nums[index];
if (index - start > k - 1)
return QuickSelect(start, index - 1, nums, k);
else
return QuickSelect(index + 1, end, nums, k - (index - start + 1));
}
}
int main()
{
int n, k;
unsigned int nums[Nmax];
in >> n >> k;
for (int i = 0; i < n; i++)
in >> nums[i];
out << QuickSelect(0, n - 1, nums, k);
return 0;
}