I have problems defining what you mean by the term search. The reason binary search splits an array into two halves is because each comparison you make divides the array into two areas, elements smaller than the element in question, and elements that are larger than the element in question. I see no easy way to generalize this so that you split the array into three parts by doing one comparison.
However, if you do not divide the array into equal halves and instead divide it by 1/3/2/3 divided by each iteration, then you will still get O (log n) performance, although the constant term will be higher. Indeed, for any constant & epsilon; in which you divided the array into fractions of size and epsilon; / 1-? Epsilon; pieces, you get O (lg n) behavior.
If during the comparison you break the array into two parts of size and epsilon; n and (1-? epsilon;) n, ending only when the size of the array becomes less than one, then the algorithm will end after k steps, where k is the smallest integer for which? epsilon; k n <1 and for which (1? epsilon;) k n <1. Reordering, we get
? epsilon; k n <1
? epsilon; k 1 / n
k> log ? epsilon; 1 / n
k> is log ? epsilon; n
k> is log n / lg epsilon;
k> lg n / lg 1 / ?
Using similar logic, but with 1 - & epsilon, we get that
k> lg n / lg 1 / (1 -? epsilon;)
Note that since lg 1 / & epsilon; and log 1 / (1 - epsilon;) are constants, the smallest k satisfying these properties is O (log n).
source share