二分查找--python

 1 import random
 2 
 3 # 二分查找--递归实现
 4 def binary_search(arr, left, right, num):
 5     if left > right:
 6         return -1
 7     mid = (left + right) // 2
 8     if arr[mid] < num:
 9         left = mid + 1
10     elif arr[mid] > num:
11         right = mid - 1
12     else:
13         return mid
14     return binary_search(arr, left, right, num)
15 
16 
17 # 二分查找非递归实现
18 def binary_chop(arr, data):
19     n = len(arr)
20     first = 0
21     last = n - 1
22 
23     while first <= last:
24         mid = (last + first) // 2
25         if arr[mid] > data:
26             last = mid - 1
27         elif arr[mid] < data:
28             first = mid + 1
29         else:
30             return mid
31     return -1
32 
33 if __name__ == '__main__':
34     arr = [11, 32, 51, 21, 42, 9, 5, 6, 7, 8]
35     print(arr)
36     arr.sort()
37     print(arr)
38 
39     num = random.randint(0, 52)
40     print('要查找的数:', num)
41     res = binary_search(arr, 0, len(arr) - 1, num)
42     if -1 == res:
43         print('未找到!')
44     else:
45         print('找到了,索引', res)
46     num = arr[random.randint(0, len(arr))]
47     print('要查找的数:', num)
48     res = binary_search(arr, 0, len(arr) - 1, num)
49     if -1 == res:
50         print('未找到!')
51     else:
52         print('找到了,索引', res)
53 
54     print('*********************')
55     print('二分查找非递归实现')
56     num = random.randint(0, 52)
57     print('要查找的数:', num)
58     res = binary_search(arr, 0, len(arr) - 1, num)
59     if -1 == res:
60         print('未找到!')
61     else:
62         print('找到了,索引', res)
63     num = arr[random.randint(0, len(arr))]
64     print('要查找的数:', num)
65     res = binary_search(arr, 0, len(arr) - 1, num)
66     if -1 == res:
67         print('未找到!')
68     else:
69         print('找到了,索引', res)
原文地址:https://www.cnblogs.com/yixiu868/p/11763450.html