Consider the following function that takes as input a sequence $A$ of integers with n elements,$A[1],A[2], \dots ,A[n]$ and an integer $k$ and returns an integer value. The function length$(S)$ returns the length of the sequence $S$. Comments start with //.
function mystery(A, k){
n = length(A);
if (k > n) return A[n];
v = A[1];
AL = [ A[j] : 1 <= j <= n, A[j] < v ]; // AL has elements < v in A
Av = [ A[j] : 1 <= j <= n, A[j] == v ]; // Av has elements = v in A
AR = [ A[j] : 1 <= j <= n, A[j] > v ]; // AR has elements > v in A
if (length(AL) >= k) return mystery(AL,k);
if (length(AL) + length(Av) >= k) return v;
return mystery(AR, k - (length(AL) + length(Av)));
}
- Explain what the function computes.
- What is the worst-case complexity of this algorithm in terms of the length of the input sequence $A$?
- Give an example of a worst-case input for this algorithm.