Dynamic spectrum access has become a promising approach to fully utilize the scarce spectrum resources. In this paper, we propose a newly distributed channel selection algorithm for cognitive radio networks (CRN). Our algorithm is based on reservation channels and does not need a common control channel. Both the dynamic states of the channels and the effects of imperfect spectrum sensing are considered in this algorithm. By deriving the optimal number of reservation channels, a good balance between the success probability of channel selection and minimal average channel switching times can be achieved. Simulation results show that our algorithm is highly adaptable and resilient to dynamic channels, and achieves better performance than Simple Channel Selection (SCS) algorithm.