linear time selection (randomized)
update