In [16]:
def binary_search(arr, low, high, x):
    if low > high:
        return -1
    mid = (low+high)/2
    print "Searching in range: %s, %s" % (low, high)
    print "arr[%s]=%s" % (mid, arr[mid])
    if arr[mid] == x:
        return mid
    if arr[mid] < x:
        return binary_search(arr, mid+1, high, x)
    return binary_search(arr, low, mid -1, x)

In [17]:
arr = range(10)
binary_search(arr, 0, len(arr)-1, 5)


Searching in range: 0, 9
arr[4]=4
Searching in range: 5, 9
arr[7]=7
Searching in range: 5, 6
arr[5]=5
Out[17]:
5

In [18]:
arr = [0,5]
binary_search(arr, 0, len(arr)-1, 5)


Searching in range: 0, 1
arr[0]=0
Searching in range: 1, 1
arr[1]=5
Out[18]:
1

In [ ]:
def reverse(arr):
    for i in range()
def rotate(arr, i):