Pagini recente » Cod sursa (job #2964565) | Cod sursa (job #450379) | Cod sursa (job #2749793) | Cod sursa (job #2844127) | Cod sursa (job #2422133)
#include <fstream>
std::ifstream in("sdo.in");
std::ofstream out("sdo.out");
const int Nmax = 3000000;
int partition(int start, int end, unsigned int nums[])
{
unsigned int piv = nums[start], aux;
while (start < end)
{
if (nums[start] > nums[end])
{
aux = nums[start];
nums[start] = nums[end];
nums[end] = aux;
}
if (piv == nums[start])
end--;
else
start++;
}
return start;
}
unsigned int QuickSelect(int start, int end, unsigned int nums[], int k)
{
if (start < end)
{
int index = partition(start, end, nums);
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;
}