Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- """
- See http://reprog.wordpress.com/2010/04/19/are-you-one-of-the-10-percent/
- """
- import math
- def bsearch(search_value, input_array):
- """
- Assume array is sorted, min at [0] and max at [-1]
- """
- # Ending conditions
- if len(input_array) <= 0:
- return False
- if search_value < input_array[0]:
- return False
- if search_value > input_array[-1]:
- return False
- split_index = int(math.floor(len(input_array) / 2))
- if input_array[split_index] == search_value:
- return True
- if search_value > input_array[split_index]:
- return bsearch(search_value, input_array[split_index+1:])
- else:
- return bsearch(search_value, input_array[0:split_index])
- Test code:
- #!/usr/bin/env python
- import unittest
- import logging
- from pfh_bsearch import bsearch
- class BsearchTester(unittest.TestCase):
- def setUp(self):
- logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s [%(funcName)s] %(message)s')
- def test_404(self):
- a = [1,2,3]
- b = 4
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, False)
- b = 0
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, False)
- a = [1,2,3,4]
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, False)
- def test_find(self):
- a = [0,1,3,5]
- b = 1
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, True)
- b = 0
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, True)
- b = 3
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, True)
- b = 5
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, True)
- def test_corner_cases(self):
- a = []
- b = 42
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, False)
- a = [1]
- rc = bsearch(b, a)
- self.failUnlessEqual(rc, False)
- suite = unittest.TestLoader().loadTestsFromTestCase(BsearchTester)
- unittest.TextTestRunner(verbosity=2).run(suite)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement