"""
This program uses the search library to perform linear and binary search on a very large list.
It times the operations.

Author: Zachary Palmer
Date: 2015-10-28
"""

from search import *
from random import *
from datetime import *

def do_searches(lst,element):
  print "Performing linear search..."
  start = datetime.now()
  answer = linear_search(lst,element)
  stop = datetime.now()
  print "Found index %s in %.4f milliseconds." % (answer,(stop-start).total_seconds()*1000)
  print "Performing binary search..."
  start = datetime.now()
  try:
    answer = binary_search(lst,element)
    stop = datetime.now()
    print "Found index %s in %.4f milliseconds." % (answer,(stop-start).total_seconds()*1000)
  except NotImplementedError:
    print "You have not implemented your binary search yet!"

def main():
  print "Building the list of random elements..."
  lst = []
  for n in range(10**7):
    lst.append(randrange(10**8))
  print "Sorting the list of elements..."
  lst.sort()
  element = choice(lst)
  do_searches(lst,element)

main()

