#include<iostream>
#include<vector>
using namespace std;
void swap(int &a,int &b)
{
int tmp = a;
a = b;
b = tmp;
}
int Randomized_Select(vector<int> arr,int low,int high,int k)
{
if (low<high)
{
int randvalue=(rand() % (high-low+1))+ low;
swap(arr[high],arr[randvalue]);
int i=low-1,j=low;
while(j<high)
{
if (arr[j]<arr[high])
{
i++;
swap(arr[j],arr[i]);
}
j++;
}
swap(arr[i+1],arr[high]);
if((i+2)==k)
{
return arr[i+1];
}
else
{
if ((i+2)>k)
{
return Randomized_Select(arr,low,i,k);
}
else
{
return Randomized_Select(arr,i+2,high,k);
}
}
}
else
{
return arr[low];
}
}
int main()
{
vector<int> arr= {1,3,2,6,5,4,8,7};
int k = 8;
int result = Randomized_Select(arr, 0, 7, k);
cout << "The " << k << "th smallest element is " << result << endl;
return 0;
}