Mercurial > public > think_complexity
view ch3ex3.py @ 33:cfb7f28678c7
bisection() wasn't returning the index like it should. Added some simple tests.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 09 Jan 2013 20:11:53 -0600 |
parents | 0f98bcb5bd3f |
children |
line wrap: on
line source
"""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 n if n >= 0 and a[n] == item else None if __name__ == '__main__': a = [0, 2, 4, 5, 7, 22] assert bisection(a, 0) == 0 assert bisection(a, 22) == len(a) - 1 assert bisection(a, 4) == 2