# assumes list has been sorted before call def binsearch_rec(list, target): return do_binsearch_rec(list, target, 0, len(list)-1) def do_binsearch_rec(list, target, first, last): if last < first: ans = -1 else: mid = (first + last)/2 if target == list[mid]: ans = mid elif target < list[mid]: ans = do_binsearch_rec(list, target, first, mid-1) else: ans = do_binsearch_rec(list, target, mid+1, last) return ans def binsearch(list, target): ans = -1 first = 0 last = len(list)-1 while last >= first: mid = (first + last)/2 if target == list[mid]: ans = mid break elif target < list[mid]: last = mid-1 else: first = mid+1 return ans def main(): while True: list = raw_input("Enter a list (or q to quit): ") if list == 'q': break list = eval(list) list.sort() print "sorted list is: ", list while True: key = raw_input(" Search key (or q to get next list): ") if key == 'q': break key = eval(key) print " recursive result is: ", binsearch_rec(list, key) print " non-recursive result is: ", binsearch(list, key) print 'Program quits.' main()