In this paper, we develop medium access control protocols to enable users in a wireless network to opportunistically transmit when they have favorable channel conditions, without requiring a centralized scheduler. We consider approaches that use splitting algorithms to resolve collisions over a sequence of mini-slots, and determine the user with the best channel. First, we present a basic algorithm for a system with i.i.d. block fading and a fixed number of backlogged users. We give an analysis of the throughput of this system and show that the average number of mini-slots required to find the user with the best channel is less than 2.5 independent of the number of users or the fading distribution. We then extend this algorithm to a channel with memory and also develop a reservation based scheme that offers improved performance as the channel memory increases. Finally we consider a model with random arrivals and propose a modified algorithm for this case. Simulation results are given to illustrate the performance in each of these settings.