Mercurial > public > think_complexity
changeset 11:0f98bcb5bd3f
Added the bisection() function for Ch 3.3 exercise 3.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Mon, 10 Dec 2012 19:25:20 -0600 |
parents | aea27d10dd18 |
children | b75bf8bfa2cf |
files | ch3ex3.py |
diffstat | 1 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ch3ex3.py Mon Dec 10 19:25:20 2012 -0600 @@ -0,0 +1,27 @@ +"""Chaper 3.3, exercise 3. + +Write a function called bisection that takes a sorted list and a target value +and returns the index of the value in the list if it's there, or None if it's +not. + +""" + +def bisection(a, item): + """Returns the index of item in the sorted list a if it exists or None if + not. + + Finds the "rightmost" item if it exists. + + """ + lo = 0 + hi = len(a) + + while lo < hi: + mid = (lo + hi) // 2 + if item < a[mid]: + hi = mid + else: + lo = mid + 1 + + n = lo - 1 + return a[n] if n >= 0 and a[n] == item else None