# binary_search.py """Module to test out binary search code from CS1110 Lecture 21""" def bin_search(b, h, k, v): """(see previous)""" i = h; j = k+1 # inv: b[h..i-1] < v, b[j..k] >=v, i <= j while i < j: mid = (i + j)/2 if b[mid] < v: i = mid + 1 # may skip vast section of b else: j = mid # may skip vast section of b return i if i <= k and b[i] == v else -1 # post: b[n] = v and v not in b[h..n-1], or, n = -1 and v not in b[h..k] if __name__ == '__main__': x = [1,3,5,6,6,8,9] assert bin_search(x, 0, 6, 5) == 2 assert bin_search(x, 0, 6, 1) == 0 assert bin_search(x, 0, 6, 9) == 6 assert bin_search(x, 0, 6, 6) == 3 assert bin_search(x, 0, 6, -1) == -1 assert bin_search(x, 0, 6, 7) == -1 assert bin_search(x, 0, 6, 10) == -1 assert bin_search(x, 4, 3, 6) == -1