• Select right as pivot element and left as fill position
  • from left to right move elements smaller or equal to fill position and move the fill position to right
  • Now p is the kth smallest element
def quickselect(l, r):
  pivot = nums[r]
  p = l

  for i in range(l, r):
    if nums[i] <= pivot:
      nums[i], nums[p] = nums[p], nums[i]
      p += 1
    
  nums[p], nums[r] = nums[r], nums[p]

  if p > k:
    return quickselect(l, p-1)
  elif p < k:
    return quickselect(p+1, r)
  else:
    return nums[p]