Binary Search

Listing two variants: One recursive and one iterative

# In this recursive version we are just not returning True/False. We are returning the index position 
# of the array where the match happened. We are using a global variable to note this index

idx = -1
def binSearch(V, arr, first, last):

    global idx
    mid = (first + last) / 2
    #print arr, first, last, mid

    if V == arr[mid]:
        #print 'found: ', mid
        idx = mid
        return mid

    if V < arr[mid]:
        binSearch(V, arr, 0, mid)
    if V > arr[mid]:
        binSearch(V, arr, mid+1, len(arr) - 1)
def binSearchIterative(V, arr):

    first = 0
    last = len(arr) - 1 
    found = False
    mid = -1

    while first <= last and not found:        
        mid = (first + last)/2

        if V == arr[mid]:
            found = True
        elif V < arr[mid]:
            last = mid - 1
        else:
            first = mid + 1

    #print 'found mid: ', mid
    print mid

Last updated

Was this helpful?