def find_kth(numbers, L, R, k): median = numbers[random.randrange(L, R)] m = L for i in range(L, R): if numbers[i] < median: numbers[i], numbers[m] = numbers[m], numbers[i] m += 1 if k < m: return find_kth(numbers, L, m, k) elif k > m: return find_kth(numbers, m, R, k) else: return numbers[k]