O(n)
int quick_search(int a[], int l, int r, int k)
{
if (l == r)
{
return a[r];
}
int i = l - 1, j = r + 1, x = a[l + r >> 1];
while (i < j)
{
while (a[++i] < x);
while (a[--j] > x);
if (i < j)
{
swap(a[i], a[j]);
}
}
int sl = j - l + 1;
if (k <= sl)
{
return quick_search(a, l, j, k);
}
else
{
return quick_search(a, j + 1, r, k - sl);
}
}