diff ch3ex3.py @ 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
children cfb7f28678c7
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