递归方法

    1. # coding:utf-8
    2. def binary_search(a_list, key):
    3. n = len(a_list)
    4. if n == 0:
    5. return False
    6. mid = n//2
    7. if a_list[mid] == key:
    8. return True
    9. elif a_list[mid] < key:
    10. return binary_search(a_list[mid+1:], key)
    11. else:
    12. return binary_search(a_list[:mid], key)
    13. if __name__ == "__main__":
    14. test_list = [1,1,2,3,5,8,13,21,34,55,89,144]
    15. print(binary_search(test_list, 3))

    非递归方法

    1. # coding:utf-8
    2. def binary_search(a_list, key):
    3. n = len(a_list)
    4. if n == 0:
    5. return False
    6. start = 0
    7. end = n-1
    8. while end >= start:
    9. mid = (end+start)//2
    10. if a_list[mid] == key:
    11. return True
    12. elif a_list[mid] < key:
    13. start = mid + 1
    14. else:
    15. end = mid - 1
    16. return False
    17. if __name__ == "__main__":
    18. test_list = [1,1,2,3,5,8,13,21,34,55,89,144]
    19. print(binary_search(test_list, 24))