Simple binary search:
int binary_search(int A[], int key, int imin, int imax)
{
// continue searching while [imin,imax] is not empty
while (imax > imin)
{
// calculate the mi!point "or roughly e#ual partition
int imi! mi!point(imin, imax)$
i"(A[imi!] key)
// key "oun! at in!ex imi!
return imi!$
// !etermine which subarray to search
else i" (A[imi!] % key)
// change min in!ex to search upper subarray
imin imi! & '$
else
// change max in!ex to search lower subarray
imax imi! ( '$
)
// key was not "oun!
return *+,_-./_0.1-2$
)
Recursive binary search:
int binary_search(int A[], int key, int imin, int imax)
{
// test i" array is empty
i" (imax % imin)
// set is empty, so return 3alue showing not "oun!
return *+,_-./_0.1-2$
else
{
// calculate mi!point to cut set in hal"
int imi! mi!point(imin, imax)$
// three(way comparison
i" (A[imi!] > key)
// key is in lower subset
return binary_search(A, key, imin, imi!(')$
else i" (A[imi!] % key)
// key is in upper subset
return binary_search(A, key, imi!&', imax)$
else
// key has been "oun!
return imi!$
)
)